2010-09-11 3 views
7

Je configure mon délai d'attente de session.Session Perdue lors de la fermeture du navigateur

<session-config> 
<session-timeout>11520</session-timeout> 

</session-config>

Chaque fois que je ferme le navigateur et l'ouvrir à nouveau en appelant le servlet, je vois cette nouvelle session est créée. Il peut être vu à partir de la méthode SessionCreated exécutée dans HttpSessionListener chaque fois que le navigateur est rouvert. Je suis nouveau dans Tomcat/Java, mais si je travaillais dans l'environnement ASP.NET, je travaillerais sur le fait de configurer un cookie avec le même nom que le nom de la session.

Quelle est la meilleure pratique pour contourner cela dans Tomcat?

merci d'avance.

Danny.

Répondre

9

Chaque fois que je ferme le navigateur et que je l'ouvre à nouveau en appelant le servlet, je vois qu'une nouvelle session est créée.

Cela correspond au comportement spécifié. Le cookie de session n'a pas d'âge, il reste donc tant que le client a l'instance webbrowser ouverte ou que le client n'a pas visité le site Web longtemps comme spécifié dans le paramètre session-timeout du côté serveur.

Vous voulez un cookie qui dure plus longtemps que le cookie de session. Vous pouvez créer un nouveau cookie longue durée en utilisant Cookie API, définir son âge en utilisant Cookie#setMaxAge(), l'ajouter à la réponse HTTP en utilisant HttpServletResponse#addCookie(). Sur les requêtes HTTP suivantes, vous pouvez déterminer la présence du cookie à l'aide de HttpServletRequest#getCookies().

Ceci n'est d'ailleurs pas spécifique à Tomcat. Vous pouvez faire la même chose sur tous les autres servletcontainer.

+0

Merci pour votre une réponse rapide. Puis-je définir l'âge maximal des cookies dans le fichier web.xml ou dans la méthode créée par HttpSesisonListener sesison? –

+0

Faites-le dans un 'Filtre'. Là, vous avez le 'HttpServletReponse' à vos mains. Vous pouvez vérifier si la session est nouvelle par 'HttpSession # isNew()'. – BalusC

9

j'ai découvert, in a similar question, que cela est désormais pris en charge dans Servlet 3.0:

<session-config> 
    <session-timeout>11520</session-timeout> 
    <cookie-config> 
    <max-age>11520</max-age> 
    </cookie-config> 
</session-config> 

(un peu en retard mais j'espère que cela peut être utile pour quelqu'un d'autre aussi)

+1

Juste ce que je cherche! C'est la meilleure réponse. – Dmitry

+0

Merci, vous m'a sauvé :) – Oneiros

+0

Merci pour la bonne suggestion –