[Java, JSP, Servlet] Problème de session

Problème de session [Java, JSP, Servlet] - Java - Programmation

Marsh Posté le 03-10-2007 à 09:46:57    

Bonjour tout le monde,  
Voilà j'ai un "léger" problème de session je m'explique:
Je dois corriger certains "bug" d'une IHM d'aministration de serveur, et mon problème de session vient lorsque une autre personne et moi même sommes connectés sur l'IHM (sur 2 pc différents), si cette autre personne se déconnecte, je suis déconnecté également.  
Dans ma méthode doPost, il y a  :
 

Code :
  1. HttpSession session = request.getSession(true);


 
Je vous remercie d'avance.


Message édité par paolo1616 le 03-10-2007 à 10:33:25
Reply

Marsh Posté le 03-10-2007 à 09:46:57   

Reply

Marsh Posté le 03-10-2007 à 10:05:32    

Montre nous le code de la déconnexion (là où tu fais le session.invalidate())
 
Sinon, ça ressemble à un problème classique. Quand plusieurs utilisateurs se retrouvent à mélanger les infos/actions il faut regarder s'il n'y a pas des variables d'instances dans tes servlets (qui rappellons le sont des singletons).

Reply

Marsh Posté le 03-10-2007 à 10:31:26    

Voici le code lorsque je vais cliquer sur l'onglet déconnexion de ma page :  

Code :
  1. if ("DECONNEXION".equals(action) || (!isConnect) ) {
  2.             twbean.processDeconnexion(); // va permettre de se déconnecter de la base
  3.             CoordinateurPageBeanMessage beanMsg = new CoordinateurPageBeanMessage("Votre session a expiré !" );
  4.             request.setAttribute("beanMsg", beanMsg);
  5.             // Redirection vers page de formulaire de visualisation
  6.             RequestDispatcher r = getServletContext().getRequestDispatcher("/jsp/" + nomPage + ".jsp" );
  7.             try {
  8.                 r.forward(request, response);
  9.                 request.removeAttribute("ACTION" );
  10.                 request.getSession(false).setMaxInactiveInterval(1);
  11.                 request.getSession(false).invalidate();
  12.                 request.setAttribute("login",null);
  13.                 request.setAttribute("password",null);
  14.                 request.setAttribute("host",null);
  15.                 request.setAttribute("dbName",null);
  16.                 request.setAttribute("port",null);
  17.                 request.setAttribute("ACTION",null);
  18.                 twbean = null;
  19.                 isConnect = false;
  20.                 request = null;
  21.             }
  22.             catch (IOException ioe) {
  23.                 isConnect = false;
  24.                 request.getSession().setAttribute("beanErreur", new CoordinateurPageBeanMessage(ioe.getMessage()));
  25.                 nomPage = "erreur";
  26.             }
  27.             catch (ServletException se) {
  28.                 isConnect = false;
  29.                 request.getSession().setAttribute("beanErreur", new CoordinateurPageBeanMessage(se.getMessage()));
  30.                 nomPage = "erreur";
  31.             }
  32.         }

Reply

Marsh Posté le 03-10-2007 à 13:40:37    

Es-tu sûr que twbean et isConnect ne sont pas partagés entre les utilisateur ? Où ces 2 variables sont-elles définies ?

Reply

Marsh Posté le 03-10-2007 à 14:07:26    

Pour la variable twbean, et isConnect elles sont  initialisées au moment de la connexion, par le code suivant :  

Code :
  1. if ("CONNECT".equals(action)) {
  2.             twbean = new TableViewBean();
  3.             //initialisation d'une nouvelle session
  4.             HttpSession session = request.getSession(true);
  5.             session.setMaxInactiveInterval(Constants.MAX_TIMEOUT);
  6.             String url = twbean.processRequest(request);
  7.             if (url == null) {
  8.                 CoordinateurPageBeanMessage beanMsg = new CoordinateurPageBeanMessage("Parametres incorrects" );
  9.                 request.setAttribute("beanMsg", beanMsg);
  10.                 // Redirection vers page de formulaire de visualisation
  11.                 url = "/jsp/SessionTimeout.jsp";
  12.             }
  13.             session.setAttribute("twbean", twbean);
  14.             session.setAttribute("login", request.getParameter("login" ));
  15.             // Redirection vers page de formulaire de visualisation
  16.             RequestDispatcher r = getServletContext().getRequestDispatcher(url);
  17.             try {
  18.                 isConnect = true;
  19.                 r.forward(request, response);
  20.             }
  21.             catch (IOException ioe) {
  22.                 isConnect = false;
  23.                 session.setAttribute("beanErreur", new CoordinateurPageBeanMessage(ioe.getMessage()));
  24.                 nomPage = "erreur";
  25.             }
  26.             catch (ServletException se) {
  27.                 isConnect = false;
  28.                 session.setAttribute("beanErreur", new CoordinateurPageBeanMessage(se.getMessage()));
  29.                 nomPage = "erreur";
  30.             }
  31.         }


 

Reply

Marsh Posté le 03-10-2007 à 16:21:58    


Et c'est des variables locales ? ou est-ce qu'elles sont déclarées?

Reply

Marsh Posté le 03-10-2007 à 17:01:38    

Ces variables sont déclarées dans ma servlet, comme données privées. Et elles sont initialisées dans le code ci dessus (où l'action est "CONNECT" )

Reply

Marsh Posté le 03-10-2007 à 17:22:16    

paolo1616 a écrit :

Ces variables sont déclarées dans ma servlet, comme données privées. Et elles sont initialisées dans le code ci dessus (où l'action est "CONNECT" )


 
BINGO !!
 
Ta servlet est un Singleton (il n'en existe qu'une seule instance) donc si tu lui mets des attributs ils sont partagés par tout le monde.
 

Reply

Marsh Posté le 03-10-2007 à 17:27:59    

OK,
Une dernière question, comment puis je faire pour que ces attributs (données) ne soient pas partagés par tout le monde ?

Reply

Marsh Posté le 03-10-2007 à 21:35:25    

session.setAttribute ...
session.getAttribute ...

 

1 session par connecté et variables locales au lieu d'attributs de la servlet.


Message édité par quazar le 03-10-2007 à 21:36:06
Reply

Marsh Posté le 03-10-2007 à 21:35:25   

Reply

Marsh Posté le 08-10-2007 à 15:51:13    

Merci beaucoup, ca à l'air de marcher, mais j'ai juste un petit problème maintenant, lorsque je cliques sur le bouton Déconnexion, j'ai une page blache, je n'ai pas ma page JSP "SessionTimeout" qui s'affiche comme avant...
EDIT : Si je mets la ligne request.getSession(false).invalidate, en commentaire cela marche, mais sinon ma page ne s'affiche pas.


Message édité par paolo1616 le 08-10-2007 à 17:18:50
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed