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 :

fermeture de navigateur => session ?


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 62
    Points : 44
    Points
    44
    Par défaut fermeture de navigateur => session ?
    Bonjour,

    Je suis en train de développer une appli web avec login et logout pour que chacun accède à son compte.

    Dans mon appli, quand un utilisateur clique sur logout, je détruis sa session et j'update dans une BDD le timestamp de logout.

    Toutefois, je me dis que la plupart des utilisateurs vont quitter le site ou fermer le navigateur sans faire de logout propre.

    Ma question : comment puis-je savoir qu'un utilisateur à quitté le site ou fermé son navigateur afin que je puisse updater mon timestamp dans ma DB ?

    Merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 106
    Points : 70
    Points
    70
    Par défaut
    Faudrait faire un timer du temps d'inactivité de l'utilisateur.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 85
    Points : 107
    Points
    107
    Par défaut
    Je ne suis pas un expert en javascript mais l'idée qui me viendrait à l'esprit est de trouver un moyen, si ça existe, de surcharger l'événement onclose de l'objet window.

    Si ceci est possible, alors tu n'as plus qu'à faire un appel en ajax à une url / action qui va simuler un logout.

    Maintenant tout dépend si on peut ou pas surcharger l'événement onclose et que ça fonctionne sur la fermeture d'un onglet du browser, sur la fermeture du navigateur et sur l'insertion d'une nouvelle url.

    A ce propos, ceci peut peut-être t'aider...
    [ame="http://www.xtremedotnettalk.com/showthread.php?t=77219"]Window OnClose() event Javascript - Xtreme .NET Talk[/ame]

    A+

  4. #4
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    une petit idée qui me vient et qui pourrait être gérable sans être trop couteux et pas difficile à mettre en place.

    A savoir un objet activity que tu placerais en session et chaque action de l'utilisateur tu met à jour sa date de derniere activité.
    Via de l'ajax tu pourrais faire appel à une servlet toute les X minutes qui irait controler l'activite de l'utilisateur et alors invalider sa session si besoin.


    qui pourrait ressemblé à ça :

    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 Activity
    {
    final static double timeForSessionOut = 30 min;//faire la convertion en miliseconde
    private Date lastAction;
    //getter et setter
     
    public void updateActivity(Date date)
    {
        setlastAction(date);
     
    }
    public boolean checkActivity()
    {
      boolean sessionValide = true;
      Date tmp = new Date()
      if(tmp - gestlastAction())>timeForSessionOut)//penser à convertir les dates
       sessionValide  = false;
      return sessionValide ;
    }
    }
    Même si je pense que travailler en milliseconde plutot qu'avec des date serait mieux

    Ca reste une simple idée que je viens d'avoir, il y a peut être mieux ^^

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    @ link256
    Il y a déjà le paramètre session-timeout du web.xml qui gère le timeout de la session.

  6. #6
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Si tu utilises la session, le plus simple est de créer un listener adapté.
    Voici comment :
    1) créer une classe qui implémente HttpSessionListener
    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
     
    package test;
     
    import java.io.FileWriter;
    import java.util.Date;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
     
    public class SessionListener implements HttpSessionListener
    {
        private static FileWriter writer;
     
        protected FileWriter getWriter()
        {
            if (writer == null)
            {
                try
                {
                    writer = new FileWriter("C:/Temp/SessionListener.txt");
                }
                catch (Exception e)
                {
                    System.out.println(e.toString());
                }
            }
            return writer;
        }
     
        public SessionListener()
        {
            super();
        }
     
     
        @Override
        public void sessionCreated(HttpSessionEvent arg0)
        {
            try
            {
                getWriter().write("Session " + arg0.getSession().getId() + " créée à " + new Date().toString());
                getWriter().flush();
            }
            catch (Exception e)
            {
                System.out.println(e.toString());
            }
        }
     
        @Override
        public void sessionDestroyed(HttpSessionEvent arg0)
        {
            try
            {
                getWriter().write("Session " + arg0.getSession().getId() + " libérée à " + new Date().toString());
                getWriter().flush();
            }
            catch (Exception e)
            {
                System.out.println(e.toString());
            }
        }
    }
    2) modifier le web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
        <listener>
            <listener-class>test.SessionListener</listener-class>
        </listener>
    ...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Citation Envoyé par fr1man Voir le message
    @ link256
    Il y a déjà le paramètre session-timeout du web.xml qui gère le timeout de la session.
    Je savais pas que c'était configurable au niveau du web.xml faudra que je regarde, merci.
    Mais il ne te permet pas à lui seul d'aller logger la déconnexion en base ce que souhaite crocodile.

    La solution d'OButterlin se déclenche quand la session vient d'expirée
    ou juste avant son expiration ?

    je demande ça vis à vis de la trace en base pour l'utilisateur car si c'est une fois la session terminée il ne pourra plus accéder aux informations utilisateurs dont il à besoin.

  8. #8
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par link256 Voir le message
    Je savais pas que c'était configurable au niveau du web.xml faudra que je regarde, merci.
    Mais il ne te permet pas à lui seul d'aller logger la déconnexion en base ce que souhaite crocodile.
    C'est évident, il faut coder la partie utile dans le listener et particulièrement dans la méthode "sessionDestroyed"
    Citation Envoyé par link256 Voir le message
    La solution d'OButterlin se déclenche quand la session vient d'expirée
    ou juste avant son expiration ?

    je demande ça vis à vis de la trace en base pour l'utilisateur car si c'est une fois la session terminée il ne pourra plus accéder aux informations utilisateurs dont il à besoin.
    Ça se déclenche avant la suppression de la session (bien que la doc ne soit pas explicite à ce sujet)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Salut,

    Merci à tous pour toutes vos réponses et vos aides. J'implémente cela au plus tôt.

Discussions similaires

  1. 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
  2. Réponses: 9
    Dernier message: 21/05/2007, 17h27
  3. Réponses: 7
    Dernier message: 15/05/2007, 14h29
  4. [VB.NET] Fermeture du navigateur et fin de session
    Par Dadou74 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 16/11/2006, 10h43
  5. Réponses: 5
    Dernier message: 24/10/2006, 11h56

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