Supprimer les cookies à partir d'une servlet réponse
Je voudrais savoir comment faire pour supprimer un cookie dans un HttpServletResponse
de Spring MVC. J'ai la méthode de login où je créer le cookie et la déconnexion lorsque je veux le supprimer, mais il ne fonctionne pas.
Voici le code:
@RequestMapping(method = RequestMethod.POST)
public ModelAndView Login(HttpServletResponse response, String user, String pass) {
if (user != null && pass != null && userMapper.Users.get(user).getPass().equals(pass)){
Cookie cookie = new Cookie("user", user);
cookie.setPath("/MyApplication");
cookie.setHttpOnly(true);
cookie.setMaxAge(3600);
response.addCookie(cookie);
Map model = new HashMap();
model.put("user", user);
return new ModelAndView("home", "model", model);
}
return new ModelAndView("login");
}
@RequestMapping(value="/logout", method = RequestMethod.POST)
public ModelAndView Logout(HttpServletRequest request, HttpServletResponse response) {
Cookie[] cookies = request.getCookies();
for(int i = 0; i< cookies.length ; ++i){
if(cookies[i].getName().equals("user")){
//Cookie cookie = new Cookie("user", cookies[i].getValue());
//cookie.setMaxAge(0);
//response.addCookie(cookie);
cookies[i].setMaxAge(0);
response.addCookie(cookies[i]);
break;
}
}
return new ModelAndView("login");
}
J'ai pensé qu'il était nécessaire de changer le maxAge
, mais dans le navigateur, le cookie ne changent pas. J'ai même essayé de réécrire un cookie avec le même nom dans le commentaire, mais il ne fonctionne pas non plus.
- ont u essayé de cookie.setvalue("")??
- double possible de Comment supprimer un Cookie dans un Servlet Java
- oui, le setValue("") ne fonctionne pas non plus...
- Le code commenté avec
new Cookie()
devrait fonctionner, en plus de définir le même domaine de cookie.
Vous devez vous connecter pour publier un commentaire.
Réglage de la limite d'âge pour
0
est droit. Mais il doit avoir exactement même d'autres cookie propriétés, à l'exception de la valeur. Donc exactement le même domaine, de chemin d'accès, sécurisé, etc. La valeur est facultatif, il peut être mieux définie ànull
.Donc, compte tenu de la façon dont vous avez créé le cookie,
il doit être retiré comme suit:
Cela dit, je ne suis pas sûr de savoir comment il est utile de stocker l'utilisateur connecté en tant que témoin. Vous êtes aussi en permettant à l'utilisateur de manipuler sa valeur. Plutôt que de le stocker comme un attribut de session au lieu et à l'appel
session.invalidate()
sur déconnexion.Pas besoin d'utiliser votre propre code. Il suffit de configurer rememberMeServices bean qui permettrait de créer cookie tout utilisateur se connectant à rememberMe option est cochée, et serait de le supprimer après déconnexion.