web-dev-qa-db-fra.com

Comment détruire efficacement 'session' dans Java Servlet?

Le Servlet que je travaille a une variable session.

J'ai essayé session.invalidate();, cela semble avoir détruit la session, mais quand je fais une redirection comme ça, alors response.sendRedirect("restanes.jsp");, l'erreur HTTP Status 500 s'affiche avec cette ligne:

Java.lang.IllegalStateException: getAttribute: Session already invalidated

Ceci est attendu puisque j'essayais de détruire la session. 

Mais pourquoi la page est-elle incapable de rediriger? Sur la même page ailleurs, j'ai redirigé avec succès.

Comment puis-je détruire la session et rediriger avec succès? 

Extrait de code:

if(request.getParameter("logout") != null ){  
        session.invalidate();
        response.sendRedirect("restanes.jsp");
}

Mise à jour: Tout ce que j'avais à faire était return; après response.sendRedirect("restanes.jsp");. Merci sincèrement à BalusC.

14
Sushan Ghimire

Vous devez revenir de la méthode après l'envoi de la redirection.

if (request.getParameter("logout") != null) {  
    session.invalidate();
    response.sendRedirect("restanes.jsp");
    return; // <--- Here.
}

Sinon, le code continuera à s'exécuter et à appliquer une méthode session.getAttribute() plus loin dans le bloc, provoquant exactement cette exception. Du moins, c’est la cause la plus probable du problème décrit jusqu’à présent et elle est fondée sur le fait qu’il s’agit d’une erreur commode. Voir aussi par exemple cette réponse .

36
BalusC

Votre code est correct

if(request.getParameter("logout") != null )
{  
  session.invalidate();
  response.sendRedirect("restanes.jsp");
}

mais assurez-vous que la page de redirection ne contient aucun attribut de session. 500 erreur interne provenant de la page "restanes.jsp" . Fonctionne avec la page redirigée et l'activité de la session.

0
Pushpendra