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 :

Variable de session persistante


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 36
    Points : 40
    Points
    40
    Par défaut Variable de session persistante
    Bonsoir à tous, depuis deux jours je planche sur les variables de sessions et ce soir j'ai une difficulté avec celles-ci. J'ai une page publique (index.jsp) et toutes les autres pages sont privées (donc accessible seulement une fois authentifié).

    Lorsque l'usager entre ses informations et clique sur le bouton de connexion, les servlets vérifient s'il existe en bdd et créent une session.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    HttpSession session = request.getSession(true);
    session.setAttribute("connected", true);
    session.setAttribute("idUsager", idUsager);
    session.setAttribute("nomUsager", ((ClUsager) ListLogin.get(0)).getNom());
    session.setAttribute("prenomUsager", ((ClUsager) ListLogin.get(0)).getPrenom());
    L'usager se trouve alors dans la section privée et peux naviguer au travers des pages sans problèmes (j'ai mis des <% session.getAttribute("prenomUsager") %> dans le code et cela affiche correctement.

    Mon problème arrive après la déconnexion. L'usager clique sur l'un des lien de déconnexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="<%=appRoot%>/jsp/deconnexion.jsp">Déconnexion</a>
    Et arrive sur cette page où la session est détruite.
    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
     
    <%@ page language="java" contentType="text/html; charset=iso-8859-1" %>
    <%@ page import="java.util.Enumeration"%>
    <%@ page import="java.*"%>
     
    <%
            String appRoot = request.getContextPath();
            String key;
            for (Enumeration names = session.getAttributeNames(); names.hasMoreElements(); ) {
                key = (String) names.nextElement();
                session.removeAttribute(key);
            }
            
            session.invalidate();
            session = null;
    %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <html>
        <head>
            <script type="text/javascript">
            function redirection(){            
                window.location = "<%=appRoot%>/index.jsp";
            }
            </script>
        </head>
     
        <body class="centrer" onLoad="setTimeout('redirection()', 2500)">
            <h2>Déconnexion en cours</h2>
            <p>Veuillez patientez...</p>
        </body>
    </html>
    Il est alors redirigé correctement vers index.jsp et les variables de session sont innexistantes (vérifié en mode débug). Cependant, en cliquant sur précédent deux fois, il peut revenir sur cette page pourtant sécurisée contre cette pratique avec les codes suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    session = request.getSession(false);
        if (session == null) {
            RequestDispatcher rd = request.getRequestDispatcher("../index.jsp");
    	rd.forward(request,response);
        }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <meta http-equiv="pragma" content="no-cache" />
            <meta http-equiv="expires" content="-1" />
    Ma question est : Qu'est-ce que j'ai oublié?

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    rien si il fait un retour arrière dans le navigateur, le navigateur affiche la page en cache, tu n'as aucun contrôle là dessus. Si tu tente d'ailleur un refresh (F5), tu aura la page de login, a priori.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2010
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    Alors là je suis un peu sous le choc. Existe-t-il un moyen de faire en sorte qu'un usager ne puisse pas accéder à des pages "connectées" et de le limiter aux page qui sont "hors-connexion"?

    Je dois avouer que je suis un peu déçu de ne pas pouvoir régler ce "bug de sécurité"...

    Merci pour la réponse précédente. J'attends impatiemment la réponse à ma nouvelle question.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    il n'y a pas de trou de sécurité, puisqu'il n'accède pas à la page concernée! Aucune requete HTTP n'est effectuée et ton serveur n'est pas impliquél orsque l'on clique sur le bouton back d'un navigateur. Et a forciori tu n'a aucun controle sur le navigateur. Si il a envie d'imprimer les pages avant que tu quitte la session, il les imprimera, c'est pas pour ça que tu dois chercher un moyen de bruler les feuilles imprimées une fois la session terminée

Discussions similaires

  1. [C#] Tester existence d'une variable de session
    Par IDNoires dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/12/2004, 12h30
  2. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 10h28
  3. Effacer les variables de session
    Par glsn dans le forum ASP
    Réponses: 2
    Dernier message: 12/12/2003, 13h42
  4. Variable de session
    Par Sadneth dans le forum ASP
    Réponses: 6
    Dernier message: 14/11/2003, 11h12
  5. variable de session
    Par divableue dans le forum ASP
    Réponses: 2
    Dernier message: 23/10/2003, 16h04

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