IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Perte de session avant l'heure


Sujet :

Servlets/JSP Java

  1. #1
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut Perte de session avant l'heure
    Bonjour,

    J'ai actuellement un souci dans une web application, au niveau des sessions.
    Avant d'effectuer chaque action d'un utilisateur, je check la session, pour voir si elle n'arrive pas en fin de vie.

    Or, depuis peu, je ne sais pourquoi (pour le moment), au bout d'un certain laps de temps, qui varie - il n'est jamais constant, la session de l'utilisateur est perdue. Je veux dire par là, que lorsque j'essaie de récupérer via ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HttpSession mySession = theRequest.getSession(false);
    L'objet 'mySession' est nul.
    Alors que mon object 'SESSION ID' est toujours en session (normal, ce n'est qu'un paramètre que je stock).
    Je considère alors que la session est invalidée, et redirige l'utilisateur sur l'écran de login pour qu'il s'y reconnecte (en faisant apparaitre le message d'erreur de session invalidée)

    Ce comportement peut arriver 15 secondes après s'être logué sur l'application, comme 45 minutes plus tard. Et ce quelque soit le genre d'action effectuée sur l'application (ce qui me fait dire que cela viendrait plus de la configuration de l'application que le code lui-même).
    (Des scripts RFT tournent en boucle en effectuant toujours la même action pour vérifié ce comportement anormal)

    Je précise que l'application tourne sur JBoss 4.3.x.

    Est-ce déjà arrivé à quelqun, ou quelqun aurait-il une idée de ce qu'il peut se passer ?

    Tks.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    d'ou tu récupère ton session id si la session n'existe pas??


    Généralement, quand on "perd" une session, c'est qu'on a oublié dans le code, les jsp etc de faire l'url encoding pour adjoindre le sessionid à l'url.

  3. #3
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Erf,

    faute de frappe, le SESSION ID n'est pas en session, il est en paramètre de l'objet Request, autant pour moi.

    En fait j'ai refais des batteries de test en restant devant l'écran pour voir un peu mieux ce qu'il se passe au moment de l'erreur. Il se trouve qu'à un moment donné, suite à l'action (recherche d'un document dans la base de données pour l'afficher), le résultat donné un écran blanc, seules les parties non conditionnées sur les Bean en session de la JSP sont affichées. Comme si effectivement la session avait été supprimée.

    Suite à cet écran sans information où la session à due se perdre, dès lors que mon script RFT exécute à nouveau une recherche, l'écran de login apparait avec le message d'invalidation de la session.

    J'y vois déjà un peu plus clair sur l'endroit où ne pas chercher (et où je cherchais jusque là), puisqu'il semble que la session soit détruite bien avant.
    J'en convient que ce n'est pas simple de m'aider sur ce coup, je ne vais pas donner le code entier et la configuration de mon application (des centaines de milliers de ligne de code), je vais essayer de tracer un peu mieux pour voir ce qu'il pourrait donner lieu à cette suppression / perte de session aléatoire.

    N'ayant jamais eu ce type de bug jusqu'à présent, je vais faire le point avec tout ce qu'il a pu être apporté lors des dernières versions.

    Pour ce qui est d'oublier de faire l'url encoding, je ne pense pas que ce soit cela puisque le script de test effectue sans arrêt la même action sur le même document (même données donc). S'il y avait un oublie, l'erreur n'apparaitrais pas aléatoirement mais toujours non ?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu peux éventuellement ajouter un session listener

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class SessionListen implements HttpSessionListener {
     
      public SessionListen() {
      }
     
      public void sessionCreated(HttpSessionEvent se) {
      }
     
      public void sessionDestroyed(HttpSessionEvent se) {
        new Exception("Stacktrace").printStacktrace(); // ;)
      }
    }

  5. #5
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Voici les logs serveur de JBoss au moment du "down" de la session:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    2010-03-25 13:18:45,950 DEBUG [org.jboss.web.tomcat.service.session.JvmRouteValve] checkJvmRoute(): check if need to re-route based on JvmRoute. Session id: lqwpRyFpQv2Vk7-qzXfkXw**.pdt_test_0 jvmRoute: pdt_test_0
    2010-03-25 13:18:45,950 DEBUG [org.jboss.web.tomcat.service.session.ClusteredSession] The session has expired with id: lqwpRyFpQv2Vk7-qzXfkXw**.pdt_test_0 -- is it local? true
    2010-03-25 13:18:45,951 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheManager] Removing session from local store with id: lqwpRyFpQv2Vk7-qzXfkXw**
    2010-03-25 13:18:45,951 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheService] Remove session from my own distributed store only. Fqn: /JSESSION/localhost/Biblio/lqwpRyFpQv2Vk7-qzXfkXw**
    2010-03-25 13:18:45,951 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheManager] Creating an empty ClusteredSession
    2010-03-25 13:18:45,951 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheManager] Creating an empty ClusteredSession
    2010-03-25 13:18:45,951 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheManager] loadSession(): session lqwpRyFpQv2Vk7-qzXfkXw** not found in distributed cache
    2010-03-25 13:18:45,952 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheManager] Creating an empty ClusteredSession
    2010-03-25 13:18:45,952 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheManager] loadSession(): session lqwpRyFpQv2Vk7-qzXfkXw** not found in distributed cache
    2010-03-25 13:18:45,952 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheManager] loadSession(): session lqwpRyFpQv2Vk7-qzXfkXw** not found in distributed cache
    2010-03-25 13:18:45,952 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheManager] Creating an empty ClusteredSession
    2010-03-25 13:18:45,952 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheManager] Session with id=lqwpRyFpQv2Vk7-qzXfkXw**.pdt_test_0 added. Current active sessions 1
    2010-03-25 13:18:45,952 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheManager] Created a ClusteredSession with id: lqwpRyFpQv2Vk7-qzXfkXw**.pdt_test_0
    2010-03-25 13:18:46,038 DEBUG [org.jboss.web.tomcat.service.session.JvmRouteValve] checkJvmRoute(): check if need to re-route based on JvmRoute. Session id: lqwpRyFpQv2Vk7-qzXfkXw**.pdt_test_0 jvmRoute: pdt_test_0
    2010-03-25 13:18:46,167 DEBUG [org.jboss.web.tomcat.service.session.JvmRouteValve] checkJvmRoute(): check if need to re-route based on JvmRoute. Session id: lqwpRyFpQv2Vk7-qzXfkXw**.pdt_test_0 jvmRoute: pdt_test_0
    Donc clairement il détecter cette dernière comme étant arrivée en fin de parcours, il doit y avoir un truc louche dans la configuration puisque cela n'arrive jamais au bout d'une durée fixe (variable entre 10 à 45 minutes)

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    avec le code que je t'ai donné, t'aura le stacktrace de ce qui déclenche la fin de session...

  7. #7
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Désolé je n'avais pas vu ton intervention et ton code.
    J'ai donc ajouté ta classe et modifié mon web.xml pour incorporer le listener.

    Voici les traces:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    2010-03-25 15:45:20,610 DEBUG [org.jboss.web.tomcat.service.session.ClusteredSession] The session has expired with id: nloVxcBGJqLLPefDGzsf9Q**.pdt_test_0 -- is it local? true
    
    2010-03-25 15:45:20,610 INFO  [STDOUT] SESSION DESTROYED, REASON:
    2010-03-25 15:45:20,610 ERROR [STDERR] java.lang.Exception: Stacktrace
    2010-03-25 15:45:20,610 ERROR [STDERR]  at *.*.*.*.*.BiblioSessionListener.sessionDestroyed(BiblioSessionListener.java:16)
    2010-03-25 15:45:20,610 ERROR [STDERR]  at org.jboss.web.tomcat.service.session.ClusteredSession.expire(ClusteredSession.java:810)
    2010-03-25 15:45:20,610 ERROR [STDERR]  at org.jboss.web.tomcat.service.session.ClusteredSession.expire(ClusteredSession.java:740)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.jboss.web.tomcat.service.session.ClusteredSession.isValid(ClusteredSession.java:720)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.jboss.web.tomcat.service.session.ClusteredSession.isValid(ClusteredSession.java:685)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.apache.catalina.connector.Request.doGetSession(Request.java:2270)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.apache.catalina.connector.Request.getSession(Request.java:2066)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.jboss.web.tomcat.service.session.JvmRouteValve.checkJvmRoute(JvmRouteValve.java:91)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.jboss.web.tomcat.service.session.JvmRouteValve.invoke(JvmRouteValve.java:81)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:437)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:381)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    2010-03-25 15:45:20,611 ERROR [STDERR]  at java.lang.Thread.run(Thread.java:810)
    
    2010-03-25 15:45:20,619 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheManager] Removing session from local store with id: nloVxcBGJqLLPefDGzsf9Q**
    2010-03-25 15:45:20,619 DEBUG [org.jboss.web.tomcat.service.session.JBossCacheService] Remove session from my own distributed store only. Fqn: /JSESSION/localhost/Biblio/nloVxcBGJqLLPefDGzsf9Q**

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    effectivement c'est un timeout


    as-tu, éventuellement, du code qui changerais ce timeout quelque part?

    Je pense à un appel à session.setMaxInactiveInterval

  9. #9
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Rien à propos de cette méthode de le code.

    J'ai lancer une recherche sur le mot "session" sur l'ensemble de mes classes Java, les principales utilisation son getId, setAttribute et removeAttribute.

    getSession(true) est utilisé dans l'une de mes méthodes si jamais la session expire, mais ça ne change en rien la configuration des sessions.

    De même, dans mon web.xml, le session timeout est setté à 360 minutes, soit 6 heures.

    :s

    Je vois quand même que ce problème est arrivé lors de la migration JBoss de l'application (qui tournait avant ça sous websphere), et les messages d'erreur montrent que la session est invalidée par le module de Clusterisation de JBoss (mon application est clusterisée)
    Je me demande si ce problème n'est pas tout simplement due à la configuration du serveur JBoss, ce qui n'est pas de ressort mais de celui d'une équipe de mon client, auquel cas je vais voir avec eux s'ils ne trouveraient pas quelque chose.

    Au besoin, si tu vois une autre source possible d'erreur coté application, n'hésite pas.
    Dans tous les cas je te remercie bien pour l'aide apportée jusqu'à présent

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    en clusterisation, il est important que soit

    1) la session soit répliquée d'un serveur à l'autre (donc nécessité d'un session sérializable)

    2) le navigateur avec une session donnée arrive toujours sur le même noeud du cluster

  11. #11
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    C'est tout à fait ça effectivement, et sous websphere ça fonctionnait plutôt bien. Sous JBoss également... sauf sur cette application. Je ne pense pas que ce soit vraiment la source de ces problèmes puisque la configuration JBoss est la même pour plusieurs applications, et ce problème n'est rencontré qu'avec cette application ci.

    J'ai discuté un peu avec l'équipe client chargée de la maintenance configuration des serveurs, apparament, en dehors des applications que je gère, ce n'est pas le premier retour sur le session depuis la migration JBoss. Je vais voir de quoi il retourne, et si cela règle mon problème également.

    Je posterai le réel problème et sa solution le cas échéant.

Discussions similaires

  1. [JSP][session] perte de session et sendRedirect
    Par blaz dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 30/03/2007, 09h32
  2. Perte de Session d'une page à l'autre
    Par Flam dans le forum Langage
    Réponses: 3
    Dernier message: 15/03/2006, 14h34
  3. [Struts]Redirection globale en cas de perte de session
    Par Mercenary Developer dans le forum Struts 1
    Réponses: 10
    Dernier message: 03/02/2006, 14h40
  4. [navigateur]Problême de pertes de sessions sous IE (.js)
    Par Invité4 dans le forum Général JavaScript
    Réponses: 26
    Dernier message: 21/11/2005, 17h53
  5. [VB.NET] Perte de session entre 2 projets
    Par TekP@f dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/05/2005, 09h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo