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 :

Récupérer une session existante


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Par défaut Récupérer une session existante
    Bonjour à tous.
    Je vous explique mon problème :

    Je dois réaliser une application de connexion d'un utilisateur via ID/MDP.
    Jusque la rien de complexe.
    Cela dit, une fois connecté, je stock dans un bean divers attributs sur l'utilisateur, puis ferme la fenêtre et le dirige sur une page d'une autre application (pas sur le même serveur).

    Ma question est la suivante :

    Si l'utilisateur relance ma page de connexion, comment retrouver sa session, et donc le bean qu'elle contient (sachant que la durée de vie de la session est fixée à une journée) ?

    J'ai tester environ 200 méthodes, et rien ne fonctionne...
    Je peux bel et bien récupérer sa session si le navigateur n'est pas fermé (en stockant dans le servletContext des attributs (httpsession/idsession) et en les récupérant grâce au Cookie JSESSIONID, mais une fois la fenêtre fermée, bien que je récupère le cookie, la session n'existe plus !


    J'ai vraiment besoin d'un coup de main sur ce coup la...
    Auriez-vous une méthode fonctionnelle ?

    Merci d'avance.



    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     //HTTP Post
        public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
        {
     
        	HttpSession laSession = null;
        	String identifiant = null;
     
        	Cookie[] cookies = request.getCookies();
     
        	if (null != cookies)
        	{
    	    	for (int i = 0; i < cookies.length; i++)
    	    	{
    		    	Cookie c = cookies[i];
    		    	String name = c.getName();
    		    	String value = c.getValue();
     
    		    	if(name.equals("sessionId"))
    		    	{
    		    		identifiant = value;
    		    	}
     
    	    	}
        	}
     
     
        	if (identifiant!=null)
        	{
        		laSession = getSession(identifiant);
        		if (laSession == null)
        		{
        			laSession = request.getSession(true);
            		Cookie c = new Cookie("sessionId",laSession.getId());
            		response.addCookie(c);
     
            		System.out.println("Cokkie trouvé, mais session créé : " + laSession.getId());
     
        		}
        		else
        		{
        			System.out.println("Session retrouvée : " + identifiant);
        		}
     
        	}
        	else
        	{
        		laSession = request.getSession(true);
        		Cookie c = new Cookie("sessionId",laSession.getId());
        		response.addCookie(c);
     
        		System.out.println("Session créée : " + laSession.getId());
        	}
     
        }
     
        private HttpSession getSession(final String sessionId)
        {
            final ServletContext context = getServletContext();
            System.out.println();
            final HttpSession session = (HttpSession) context.getAttribute(sessionId);
            return session;
        }

  2. #2
    Membre émérite Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Par défaut
    Partant sur le postulat que tu as une session d'une durée de vie de 24H...
    Le navigateur ? Il efface pas les cookies à sa fermeture ?
    Normalement, tu n'as pas besoin de récupérer la session à l'aide de JSESSIONID, request.getSession(...) devrait suffir.

  3. #3
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Par défaut
    Et bien c'est ce qu'il me semblait, mais non, je ne récupère jamais la même session, pourtant le cookie oui...

    Peut être le configuration de Websphère, mais pour moi, l'appli est d'une simplicité telle, que tout devrais fonctionner...

    Sinon on m'a parlé de :

    " Pourquoi ne pas te créer un cache pour conserver les sessions ? Couplé à un TimerTask pour épurer les données présentes depuis longtemps et les mettre sur le disque ? "

    Une idée ?

  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
    Les cookies envoyés par le serveur sont normalement supprimés par le navigateur à la fermeture (ils ont une durée de vie de type session). En effet, en général, Si le gars ferme sa page dans une cybercafé, t'as pas envie que le suivant qui passer par là récupère sa session .

    Maintenant, il me semble que websphere a une option de config pour choisir la durée de vie de ce cookie (jusqu'à fermeture du navigateur ou jusqu'à expiration).

  5. #5
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Par défaut
    En effet, il est possible de paramétrer la durée de vie du JSESSIONID dans websphère, cela dit, rien y fait...
    Sa récupération se passe sans problèmes aucun, mais une fois le navigateur fermé, je ne retrouve plus la session correspondante à sa valeur (ni avec un simple getSession, ni en cherchant les sessions stockées dans mon ServletContext)...

    je tiens à préciser que j'au un listener sur la création / destruction de session, et que c'est celui-ci qui me permet de les stocker dans le ServletContext :

    (A ce propos, la durée de vie du servletContext est de l'ordre de la session ou de l'application ?)

    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
     
    public class Listener implements HttpSessionListener
    {
     
    	public void sessionCreated(final HttpSessionEvent se)
    	{
            final HttpSession session = se.getSession();
            final ServletContext context = session.getServletContext();
            context.setAttribute(session.getId(), session);
            System.out.println("session created : " + session.getId());
        }
     
        public void sessionDestroyed(final HttpSessionEvent se)
        {
        	System.out.println("session destroyed : " + se.getSession().getId());
            //final HttpSession session = se.getSession();
            //final ServletContext context = session.getServletContext();
            //context.removeAttribute(session.getId());
        }
     
    }

  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
    Ni l'un ni l'autre, c'est la durée de vie de la servlet. Souvent elle coincide avec la durée de vie de l'application, mais ce n'est pas une obligation. De plus, en cas de multiples serveur avec load balancing, chaque serveur à son propre contexte.

    Quand vous ouvrez le navigateur : les cookies y sont toujours? Le navigateur n'est-il pas configuré, comme beaucoup, pour effacer tous ses cookies à la fermeture?

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

Discussions similaires

  1. récupérer une session
    Par artotal dans le forum Langage
    Réponses: 3
    Dernier message: 15/06/2008, 19h33
  2. récupérer une session lors du retour après paiement externe
    Par eric13007 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 03/06/2008, 22h11
  3. Réponses: 1
    Dernier message: 28/09/2007, 09h42
  4. récupérer une session
    Par mouvma dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 17/09/2007, 12h40
  5. [ TOMCAT ] récupérer une session PHP
    Par greatmaster1971 dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 20/01/2006, 12h10

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