2010-02-18 5 views
2

Lors de la diffusion d'un document de formation Flash, les utilisateurs rencontrent régulièrement un délai d'attente de session HttpSession. Actuellement, le délai d'inactivité est défini sur la valeur par défaut (30 minutes).J2EE - Gestion des délais de session HttpSession lors du traitement du contenu Flash

Questions:

  1. Serait-ce une bonne idée de tenter d'augmenter MaxInactiveInterval pour tout utilisateur qui demande une vidéo flash de formation pour éviter les délais d'attente?

  2. Une meilleure approche serait-elle d'utiliser un écouteur de cycle de vie de servlet pour réactiver la session HttpSession si la session HttpSession est associée à l'affichage du contenu de formation? - Cela peut permettre un contrôle plus précis de l'expiration de l'objet HttpSession.

  3. Seul un faible pourcentage de l'utilisateur verra réellement ce contenu à la fois, y a-t-il une pénalité de performance qui devrait être prise en compte pour ce faire?

Répondre

1

La vidéo flash est-elle incorporée dans une page HTML? Si c'est le cas, vous pourriez avoir un appel AJAX sur la page qui envoie périodiquement un "signal de présence" au serveur pour maintenir la session en vie.

+0

Voici une bonne explication: http://ajaxpatterns.org/Heartbeat – Aito

2

Plutôt tirer des sondages ajax en arrière-plan.

Voici un SSCCE avec un peu d'aide de jQuery. Il suffit de le copier et de le coller (et de changer l'objet flash en fonction de votre code actuel).

<!doctype html> 
<html lang="en"> 
    <head> 
     <title>SO question 2290101</title> 
     <script src="http://code.jquery.com/jquery-latest.min.js"></script> 
     <script> 
      $(document).ready(function() { 
       setInterval(function() { 
        $.get('poll'); 
       }, ${(pageContext.session.maxInactiveInterval - 10) * 1000}); 
      }); 
     </script> 
    </head> 
    <body> 
     <object type="application/x-shockwave-flash" ... > 
      ... 
     </object> 
    </body> 
</html> 

Ici ${pageContext.session.maxInactiveInterval} retourne le reste de secondes la session n'a pas encore à vivre (et est été un peu -Juste de raccourci pour être dans le temps avec poll- et converti en millisecondes afin qu'il convient ce que setInterval() attend). Le $.get('poll') doit appeler une servlet qui est mappée sur un url-pattern de /poll et contient essentiellement la ligne suivante dans la méthode doGet().

request.getSession(); // Keep session alive. 

C'est tout.

Questions connexes