2010-10-26 4 views
0

J'ai implémenté un filtre sevlet dans mon application, et dans le filtre, si je trouve un modèle d'URL spécifique, j'utiliserai request.getSession(). Invalidate() pour déconnecter et effacer la session, puis rediriger vers une page de connexion.Pourquoi session.invalidate ne fonctionne pas dans le navigateur IE?

session.invalidate(); 
session.setAttribute("hi", true); 
response.sendRedirect("login.jsp"); 

mais j'ai trouvé, après que j'entrer le nom d'utilisateur et mot de passe, puis soumettre le formulaire de connexion, la session précédente ne semble pas être complètement effacé.

Donc, est-il possible de me laisser complètement effacer la session et juste comme commencer une nouvelle instance IE (BTY, mon code fonctionne dans FF et Chrome).

+0

comment pouvez-vous dire que sa ne fonctionne pas pour IE? Je veux dire ce qui vous a fait enregistrer que ça ne fonctionne pas pour IE –

+0

par exemple: Si j'utilise une nouvelle instance IE, après avoir soumis le formulaire de connexion, la requête ne contiendra pas "En-tête d'autorisation", mais si c'est le cas décrit ci-dessus, puis dans la demande, il contiendra un "en-tête d'autorisation" qui doit en raison du cache. – MemoryLeak

Répondre

1

La session est un concept côté serveur. Le navigateur contient uniquement un jsessionid pour indiquer au serveur l'objet de session à extraire pour cette requête.

Cela dit, votre problème n'est pas IE. Et même si c'est le cas, c'est une sorte de cache que vous faites face. Videz votre cache Vous pouvez définir ces en-têtes de réponse:

Cache-Control: no-cache, no-store 
Pragma: no-cache 
+0

Je le sais aussi, mais le problème est que je ne peux pas effacer le cache côté serveur. – MemoryLeak

+0

Je voulais dire cache côté client – Bozho

+0

ouais, c'est cache côté client, je ne peux pas effacer le cache côté client côté serveur, et il est ridicule de demander à l'utilisateur de vider le cache après la déconnexion, non? – MemoryLeak

0

@Bozho une question rapide à clarifier. JSP a un objet implicite de session par défaut créé. Ici, dans ce cas, il crée une session puis invalide, après invalidation, il définit les attributs qui utilisent à nouveau la session implicite créée.

0

Je sais que c'est un ancien article. Mais récemment, j'ai le même problème.

J'essaie session.invalidate() .... et ne fonctionne pas. Je tente de supprimer les coockies et ne fonctionne pas ...

Le problème était cache Internet Explorer .. Je viens de mettre aucun en-tête de cache sur ma réponse serlevt, puis travaille pour moi.

Code Exmple:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setHeader("Cache-Control","no-store"); //HTTP 1.1 
    response.setHeader("Pragma","no-cache"); //HTTP 1.0 
    response.setDateHeader ("Expires", 0); 
    ...... 
    ...... 
    response.response.getWriter().print(json); 

}

Questions connexes