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 :

Problème Filtre controlant l'existance d'une session


Sujet :

Servlets/JSP Java

  1. #1
    Membre éprouvé Avatar de scandinave
    Homme Profil pro
    Développeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 919
    Points
    919
    Par défaut Problème Filtre controlant l'existance d'une session
    Bonjour, je cherche à créer un filtre permettant de contrôler qu'un utilisateur est bien connecté lorsqu'il accède à une ressource du site.

    Le filtre marche bien . Je test dans ce filtre si la session est null ou pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    HttpSession session = request.getSession(false)
    if(session == null){
         //redirection sur la page d'accueil.
    }
    else {
        // On continue la requête vers la ressource demandées
    }
    Cela fonctionne bien si je me déconnecte et que je quitte puis relance Firefox.
    Si je rentre une URL du site , je suis bien rediriger vers le formulaire de connexion.

    Par contre si je me déconnecter et entre une URL du site sans quitter Firefox, je tombe en erreur car la session n'est pas null mais ne contient plus non plus les identifiants de l'utilisateur.

    Il semblerai que Firefox retienne l'id de la session même après un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    session.invalidate();
    session = null;
    Comment-puis-je empêcher ça?

  2. #2
    Membre éprouvé Avatar de scandinave
    Homme Profil pro
    Développeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 919
    Points
    919
    Par défaut
    Après recherche , je crois que le ne marche pas.
    ou alors le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     request.getSession(false)
    sensée retourner null si la session est invalide ne joue pas son rôle.

  3. #3
    Membre confirmé
    Avatar de drieu13
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 131
    Points : 469
    Points
    469
    Par défaut
    Peux-tu essayer d'ajouter l'option must-revalidate dans le header ?

    Exemple :

    response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
    response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    response.setDateHeader("Expires", 0); // Proxies.

  4. #4
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    quand tu fais un session.invalidate(), la session est jetée, le cookie du navigateur n'est plus reconnu. Par contre, si dans la même requête, plus loin, tu fais un getSession(), tu va recréer une nouvelle session, vide, et la transmettre au navigateur. C'est, je pense, ce qui se passe dans ton cas, donc vérifie bien le code exécuté après ce invalidate. Aussi, vérifie ton firefox, son cookie JSessionID ne devrait pas être changé par le "déconnexion" que tu fais.


    PS: il est préférable cependant de revoir ton test comme ceci pour être plus robuste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    HttpSession session = request.getSession(false)
    if(session == null ||session.getAttribute("UtilisateurEstLoggueEtValide")==null){
         //redirection sur la page d'accueil.
    }
    else {
        // On continue la requête vers la ressource demandées
    }

  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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    L'id de session est très certainement calculé en fonction d'éléments du client et du serveur, il est normal que cet id ne change pas.
    On a fait des tests, on a 3 instances de jboss sur un même serveur (physique) et toutes les applications ont le même id session.
    Ce n'est pas plus gênant que ça, les zones de stockage des objets en session sont elles bien séparées.

    Dans ton cas, je pense que tu dois avoir quelque part un request.getSession() qui traine... mais le session.invalidate() fonctionne à mon avis puisque tu n'as plus d'objets.

  6. #6
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    normalement l'id de session doit être aléatoire. Sinon, cela signifie que je peux le précalculer et me faire passer pour quelqu'un d'autre!
    Es-tu sur que les trois instance n'ont pas été configurées pour faire partie d'un même cluster avec des système de single sign on?

    Je viens de tester ici, un seul serveur jboss, un invalidate entre deux session, c'est bien deux JSESSIONID différents. Par contre, le invalidate ne détruit pas le cookie, c'est uniquement le request.getSession(true) suivant qui remplacera le cookie.


    Au fait, pour rappel, les pages JSP, par défaut, créent une session si on n'a pas mis session=false dans le tag @page. Ca expliquerais pourquoi tu récupère une session après le invalidate si tu redirige l'utilisateur vers un tel jsp.

  7. #7
    Membre éprouvé Avatar de scandinave
    Homme Profil pro
    Développeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Points : 919
    Points
    919
    Par défaut
    J'ai enfin résolus le probleme. Effectivement la JSP recrée un identifiant de session a chaque fois. Le test suggéré sur l'existence de l'attribut session ma partie de bien réussir le test.
    Merci beaucoup.

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

Discussions similaires

  1. Controle d'existance d'une requete
    Par airbeone dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 18/08/2006, 09h18
  2. Tester l'existence d'une session
    Par waterbed dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 04/08/2006, 14h44
  3. Comment tester l'existence d'une session ?
    Par watcha2020 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 26/07/2006, 17h36
  4. Réponses: 4
    Dernier message: 03/05/2006, 13h58
  5. [LG] Contrôle d'existence d'une variable ?
    Par Aenigma dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2005, 06h59

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