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 :

[Servlets / AJAX] Gestion des variables de session qui expirent


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut [Servlets / AJAX] Gestion des variables de session qui expirent
    Hello,

    dans mon application web j'utilise Jquery et des servlets.

    J'ai ma première servlet "Login" dans laquelle , je me connecte à un Ldap, puis je charge une liste d'objets liés à mon utilisateur courant en session.

    Cette liste d'objet est utilisée dans d'autres servelts via un request.getSession().getAttribute("maListe").

    Cependant, comme ces servlets sont appelées via Ajax pour charger une partie de ma page, quand la session a expirée et que du coup "maListe" est null, j'ai une exception dans ma servlet et mon ajax ne renvoie rien.

    Y'a t-il un moyen, d'effectuer une vérification de la session et de certaines variables, et dans le cas où elles sont nulles, charger une page du style "http://..." ?

    A l'heure actuelle, avant tout traitement dans mes servlets, je fais appel à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	...	if(request.getSession(false) == null || maListe== null){
    			logger.debug("session expirée");
    			sessionCourante.invalidate();
    			request.getRequestDispatcher("/jsp/login.jsp").forward(request,	response);
     
    		}
    sauf que , ma page "login.jsp" est juste chargée dans l'endroit de la page que je charge via mon appel ajax, pas cool donc.

    Je pensais éventuellement à utiliser le setHeader ?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Tu peux effectivement utiliser un code Http de retour pour indiquer à ta page de te rediriger vers la page de connexion.
    Si tu utilises jQuery, tu peux regarder du côté de ajaxError : http://api.jquery.com/ajaxError/

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Personnellement, j'utilise plutôt un activateur de session cyclique via ajax et basé sur le temps de conservation de la session (fixé au plus bas).
    Du coup, la session n'expire jamais, sauf si l'utilisateur à quitté l'application.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Du coup c'est dommage, l'application ouverte mais non utilisée continue à utiliser des ressources côté serveur.

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Oui, mais si la fenêtre est ouverte, on peut considérer qu'elle est toujours active.
    La problématique est toujours la même :
    - on met un timeout long et du coup on garde des ressources inutiles longtemps quand l'utilisateur ferme sa fenêtre
    - on met un timeout très court mais on active périodiquement la session

    Les 2 solutions ont des avantages et des incovénients, nous, on a tranché pour le timeout super court
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut
    Salut,

    tu aurais un exemple de ce style de gestion de session à tout hasard ? :p

    Pour le moment, je suis parti sur cette méthode :

    Dans ma servlet Login, je crée mes variables de session via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.getSession().setAttribute("toto")
    Dans mes autres servlets, je controle ma session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		if(request.getSession(false) == null ||  request.getSession(false).getAttribute("listeObjects") == null){
    			logger.debug("session expirée");
    			response.setStatus(400);
    		}
    Et dans le ajax :
    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
    	$.ajaxSetup({
            error: function(data, error, errorThrown) {
     
    			if(data.status==400){
    					$("#dialog").text("Votre session a expirée.") ;
    					$( "#dialog" ).dialog({
    						modal: true,
    						buttons: {
    							Ok: function() {
    								$( this ).dialog( "close" );
    								$("li#deconnexion").click();
    							}
    						}
    					});
    			}else{
    				afficherDialogErreur(data.statusText);	
    			}
            }
        });
    Sinon, dans les servlets je récup mes variables de session via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.getSession(false).getAttribute("toto");

    Ca semble plutot bien fonctionner pour l'instant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion des variables de Session
    Par mamady.kaba dans le forum Zend Framework
    Réponses: 0
    Dernier message: 25/11/2010, 11h41
  2. [MySQL] problème de gestion des variables de sessions (même navigateur)
    Par alaska750 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/08/2009, 16h59
  3. Gestion des variables de session
    Par Yoplaboum dans le forum Struts 1
    Réponses: 8
    Dernier message: 09/11/2007, 16h07
  4. gestion des Variables Sessions
    Par Landolsi dans le forum ASP.NET
    Réponses: 8
    Dernier message: 08/02/2007, 13h30
  5. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44

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