2010-11-08 8 views
3

J'écris mon application Web SPring MVC.Servlet Session timeout

J'ai défini la durée de ma session sur 10080 minutes égales à 1 semaine. Maintenant, je voudrais garder l'utilisateur connecté à chaque fois qu'il navigateur open:

sessionService.setcurrentUser(myuser); 
     HttpSession session = request.getSession(); 
     Cookie cookie = new Cookie("JSESSIONID", session.getId()); 
     cookie.setMaxAge(timeout); 
     response.addCookie(cookie); 

Si mon biscuit Max Age être le même que le temps de la session sur?

cookie.setMaxAge(10080); 

Est-ce une bonne pratique?

+0

Pour votre information, la valeur du paramètre setMaxAge est en quelques secondes, alors que la session délai d'attente est en quelques minutes - vous devez multiplier 10080 par 60 pour obtenir le résultat final vous cherchons. – Vladimir

Répondre

1

Vous utilisez des cookies pour faire référence à votre identifiant de session. Si le délai du cookie est inférieur à la session, il ne trouvera plus votre session. Il est donc conseillé de régler le délai d'expiration de votre cookie au moins sur le délai d'expiration de votre session.

+1

Cette réponse n'a pas de sens. L'ID de la session (JSESSIONID) est transmis au conteneur de servlet via la mécanique d'un cookie (alternative via la réécriture d'URL). Ainsi, du point de vue de l'utilisateur, la session est terminée si le cookie expire. Si le délai d'attente de cookie est supérieur au délai d'expiration de la session (web.xml/session-config/session-timeout), le conteneur peut invalider une session avant que l'âge maximum des cookies ne soit atteint. – whaefelinger

7

Vous devez le configurer dans web.xml, pas en piratant le cookie de session par défaut.

<session-config> 
    <session-timeout>10080</session-timeout> 
</session-config> 

Notez que vous ne devriez pas stocker trop de données en session et/ou que votre serveur dispose de suffisamment de mémoire.

+0

Cela ne fonctionnera pas. Par défaut (au moins sur Tomcat), une session devient invalide lorsque le navigateur est fermé. Cela se produit car l'âge du cookie de session (le cas échéant) est défini sur "0". – whaefelinger

+0

@user J'ai répondu à la question, pas à l'exigence fonctionnelle. Vous avez raison, cette réponse est inapplicable. J'ai déjà répondu à une telle question plusieurs fois auparavant. – BalusC

2

Les publications suivantes contiennent des informations intéressantes.
En ce qui concerne les bonnes pratiques que vous avez probablement va deux choses à considérer:

  • aspect sécurité de laisser une la session active pendant une longue période de temps.
  • Conséquences sur la mémoire, votre session sera sérialisée et vous souhaiterez la réduire au minimum. Surtout si le nombre d'utilisateurs pourrait augmenter considérablement.

Discussion 1
Discussion 2
Discussion 3