2009-04-20 7 views
5

J'utilise une application Web J2EE dans Tomcat, et récemment, j'ai été chargé d'ajouter des métriques à l'application. J'utilise un SessionListener pour détecter quand la session est détruite, puis pour télécharger les métriques dans une base de données. Le délai d'expiration de ma session est défini dans mon fichier web.xml sur 30 minutes, et je n'invalide pas la session n'importe où par programmation. Souvent, pendant une période de 5 à 10 minutes de connexion au test, je vois 3 ou 4 ensembles de métriques téléchargés dans la base de données, tous avec des identifiants de session différents.Invalidation de session aléatoire

Outre web.xml et session.invalidate(), quoi d'autre peut entraîner la destruction d'une session dans Tomcat? Des exceptions? Tomcat va-t-il invalider les sessions de manière aléatoire?

+0

Utilisez-vous des sessions persistantes? – trunkc

+0

Je n'utilise pas de sessions persistantes. – jconlin

+0

Votre journalisation devrait créer une seule session, vous avez mentionné sa création 3 ou 4. Persistent-vous des métriques seulement quand la session est détruite ou aussi quand elle est créée? –

Répondre

4

Votre navigateur Web a peut-être décidé de ne pas envoyer le cookie de session sur une demande à l'application Web, où votre application aurait dû en recevoir une. J'ai vu cela se produire avec une règle de réécriture apache; une URL en dehors du chemin de cookie de session a été redirigée vers l'application Web. Il quelque chose comme les folowing arrivé (détails peut-être tort):

  • mon application Web a été situé à/app/
  • ainsi le cookie de session a été lié à cette voie/app/
  • une page dans la webapplication appelé /img/magic.jpeg
  • le navigateur n'a pas envoyé le cookie de session dans sa demande de cette image (chemin ne correspond)
  • le serveur redirigé la demande (interne) à/app/createImage? magie
  • le web application n'a pas reçu un cookie de session, donc il a créé une nouvelle session

Vous devriez être capable de voir si cela cause votre problème si vous consignez l'URL initiale pour les nouvelles sessions.

0

Ce n'est probablement pas ce qui se passe sur votre serveur, mais si l'heure système est définie sur le serveur, cela peut entraîner l'expiration des sessions plus rapidement qu'un "temps écoulé" de 30 minutes. Tomcat - au moins à partir de la version 5.5 - a utilisé "clock time" pour expirer les sessions, donc le changement de l'horloge du système affectera la durée de vie de la session.