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 :

Aucune destruction de Session à la fermeture du navigateur


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut Aucune destruction de Session à la fermeture du navigateur
    Bonjour,

    J'ai codé une méthode qui me permet de déconnecter mon utilisateur en vérifiant si la session créée par le navigateur existe toujours, si la session est détruite, déconnecter mon utilisateur
    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
    package ci.session;
     
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    import org.apache.log4j.Logger;
    import org.springframework.stereotype.Service;
    import ci.bean.User;
    import ci.service.*;
     
    @Service
    public class UserSessionListener implements HttpSessionListener {
     
        private Logger log = Logger.getLogger(UserSessionListener.class);
     
        private MessageServices messageService;
     
        public void sessionCreated(HttpSessionEvent se) {
     
            // log request of the INFO level
            log.info("Session créée: " +se.getSession().getId());
        }
     
        public void sessionDestroyed(HttpSessionEvent se) {
     
            //messageService = new MessageServiceImpl();
     
            HttpSession session = se.getSession();
     
            /*// Liaison avec le WebApplicationContext
            ApplicationContext ctx = WebApplicationContextUtils
                    .getWebApplicationContext(session.getServletContext());
                    BeanFactory factory = ctx;
                    */
     
            // Suppresion de l'utilisateur dans la liste des connectés
            try{
            User user = (User) session.getAttribute("user");
            messageService.removeUser(user);
            }
            catch(Exception ex){
                log.error(ex.getMessage(), ex);
            }
            // log request about session's that are invalidated
            log.info("Session détruite: " + session.getId());
        }
    }
    A l'ouverture du navigateur, ma session se crée mais ne se détruit pas à la fermerture.

    Quelqu'un saurait-il m'indiquer comment faire ?

    Merci d'avance pour votre aide.

  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
    C'est normal, quand tu fermes ton navigateur, ton application serveur n'est pas avertie de l'événement.
    Essaie avec un petit javascript qui détectera la fermeture de la fenêtre et qui appellera une servlet s'occupera de la destruction de la session.

  3. #3
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    Citation Envoyé par fr1man Voir le message
    C'est normal, quand tu fermes ton navigateur, ton application serveur n'est pas avertie de l'événement.
    Non c'est faux,

    Citation Envoyé par fr1man Voir le message
    Essaie avec un petit javascript qui détectera la fermeture de la fenêtre et qui appellera une servlet s'occupera de la destruction de la session.
    Quelle horreur.

    Concernant le problème proprement dit, lorsqu'on fait appel à HttpServletRequest.getSession(), une session est automatiquement créée. Pour détruire une session il faut appeler HttpSession.invalidate(). Seulement attention lorsque l'on fera à nouveau appel à getSession, elle sera recréée. Pour récupérer la session uniquement si elle existe, il faut appeler HttpServletRequest.getSession(false), dans ce cas, on aura null si la session n'existe pas.

    PS : Ici tu a l'air de faire de la "sécurité", je t'invite donc à regarder du côté de JAAS qui est fait pour.

    On ne code pas en Java comme en PHP !

  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
    Citation Envoyé par Alain Defrance Voir le message
    Citation Envoyé par fr1man
    C'est normal, quand tu fermes ton navigateur, ton application serveur n'est pas avertie de l'événement.
    Non c'est faux,
    Si c'est vrai Le protocole http ne prévois rien pour qu'un navigateur informe le serveur de la destruction des cookies. Le plus simple c'est de gentillement attendre le timeout de la session. Rien à faire, peinard.

    Et je confirme, la solution javascript, évite! C'est pas fiable et ça n'apporte rien.

  5. #5
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Si c'est vrai Le protocole http ne prévois rien pour qu'un navigateur informe le serveur de la destruction des cookies.
    Ce que je voulais dire par là, c'est que c'est pas normal et que l'on a pas à gérer cela. On va tout simplement perdre la session même si elle sera toujours active sur le serveur, puis elle sera détruite lorsqu'elle atteindra la fin de sa vie (défini dans web.xml).

    En effet je confirme que le protocol HTTP ne permet pas d'informer le serveur que la session n'est plus connue par le client.

  6. #6
    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
    Ce que je voulais dire par là, c'est que c'est pas normal et que l'on a pas à gérer cela. On va tout simplement perdre la session même si elle sera toujours active sur le serveur, puis elle sera détruite lorsqu'elle atteindra la fin de sa vie (défini dans web.xml).
    Faut un peu arrêter de raconter n'importe quoi.
    Selon le type d'application, on peut avoir envie de détruire sa session présente sur le serveur, notamment si on a beaucoup de données stockées et que le timeout est très long. Pour ceci, on peut soit attendre qu'elle se détruise d'elle même grâce au timeout, soit on peut la détruire en faisant un appel serveur.
    On retrouve cette façon de faire pour les boutons de déconnexion sur les sites de banque en ligne par exemple.
    L'idée du unload en javascript qui sera appelé notamment lors de la fermeture du navigateur, et même si ce n'est pas parfait, c'est toujours mieux que rien.

    EDIT: Le unload n'est pas forcément terrible ok, mais un bouton ou un lien pour détruire la session, je trouve ça très propre, même si on a pas de garantie qu'il sera utilisé.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/04/2010, 12h35
  2. Durée de vie des sessions et fermeture du navigateur
    Par taffMan dans le forum Langage
    Réponses: 2
    Dernier message: 24/01/2008, 11h05
  3. fermer une session à la fermeture du navigateur
    Par phpieur dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/08/2007, 16h15
  4. Réponses: 9
    Dernier message: 21/05/2007, 17h27

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