web-dev-qa-db-fra.com

Invalider la session dans Logout Servlet

HttpSession session  = request.getSession();
try
{      
    session.removeAttribute("logonSessData");
    session.invalidate();                               
    String pageToForward = request.getContextPath();
    response.sendRedirect(pageToForward);           
}
catch (Exception sqle)
{
    System.out.println("error UserValidateServlet message : " + sqle.getMessage());
    System.out.println("error UserValidateServlet exception : " + sqle);
}

dans la déconnexion, le servlet que j’ai écrit ci-dessus dans la méthode doPost et doGet. Après la déconnexion, l'écran de connexion s'affiche. Si j'appuie sur le bouton Précédent, l'écran précédent est affiché avant la déconnexion. Si je clique sur une page, l'écran affiche "HTTP Status 500". F5 puis il chauffe le login Servlet et obtient l’accès complet de l’utilisateur.

Comment arrêter ce problème, montrez qu'après la déconnexion, utilisez le bouton Précédent et F5 utilisateur ne peut utiliser aucune page?

12
user1429962

Ce que tu fais est bien. Le navigateur met en cache les pages précédentes et lorsque vous cliquez sur le bouton Précédent, il affiche la page précédente en cache. 

Vous devez ajouter des en-têtes de cache qui n'autorisent pas le navigateur à mettre en cache la page.

Cache-Control: no-cache
5
Ramesh PVK

1) Lorsque vous cliquez sur le bouton Précédent du navigateur, vous obtenez la page précédente à cause du cache du navigateur.

2) Lorsque vous cliquez sur une page après avoir sauvegardé, vous obtenez le statut 500 car il existe une exception de pointeur nul car l'objet de la session est déjà invalide.

3) Lorsque vous actualisez une nouvelle demande en direction de votre servlet ou de votre JSP, vous appelez la méthode request.getSession();, qui crée un nouvel objet de session pour vous.

par conséquent, vous obtenez à nouveau un accès complet à toutes les pages.

Pour éviter ce problème, vous pouvez suivre les étapes ci-dessous.

1) Dans l'application, créez un servlet Ex: LoginCheckerServlet

2) pour le servlet ci-dessus, donnez le motif url/*

3) Donc le servlet sera exécuté pour toute la requête

4) Maintenant dans LoginCheckerServlet, recherchez le nom d'utilisateur et le mot de passe dans les paramètres de requête

5) S'ils viennent, effectuez une vérification de connexion et affichez la page d'accueil

6) Si le mot de passe du nom d'utilisateur ne vient pas, il y a deux significations 

     i)user is already logged in 

    ii)user is trying to access your app illegally

7) Appelez maintenant la méthode request.getSession(false); qui vous donnera un objet de session s’il existe déjà une session pour cet utilisateur afin que vous puissiez rediriger vers la page d’accueil avec confiance.

8) request.getSession(false); vous donnera une valeur nulle s'il n'y a pas de session existante pour cet utilisateur.

9) Au cas où vous n'obtenez pas le nom d'utilisateur et le mot de passe dans les paramètres de requête et que request.getSession(false); vous donne la valeur NULL, cela signifie que l'utilisateur tente d'accéder à votre application sans se connecter, vous pouvez désormais afficher la page interdite.

1
Jagadeesh