Comment supprimer un cookie dans un servlet Java?
J'ai essayé ceci: http://www.jguru.com/faq/view.jsp?EID=42225
EDIT: Ce qui suit fonctionne maintenant avec succès, il semble être la combinaison de:
response.setContentType("text/html");
et
cookie.setMaxAge(0);
Avant je faisais:
//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(-1);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);
Qui expire le cookie lorsque le navigateur est fermé selon la documentation .
Une valeur négative signifie que le cookie n'est pas stocké de manière permanente et sera supprimé à la fermeture du navigateur Web. Une valeur nulle entraîne la suppression du cookie.
L'extrait de code complet pour faire expirer un cookie est:
//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(0);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);
Dans mon environnement, le code suivant fonctionne. Bien que semble redondant à première vue,
cookies[i].setValue("");
etcookies[i].setPath("/");
sont nécessaires pour effacer correctement le cookie.la source
Gardez à l'esprit qu'un cookie est en fait défini par le tuple de son nom, son chemin et son domaine. Si l'un de ces trois est différent, ou s'il existe plusieurs cookies du même nom, mais définis avec des chemins / domaines qui peuvent encore être visibles pour l'URL en question, vous verrez toujours ce cookie transmis lors de la demande. Par exemple, si l'url est " http://foo.bar.com/baz/index.html ", vous verrez tous les cookies définis sur bar.com ou foo.bar.com, ou avec un chemin de "/" ou "/ baz".
Ainsi, ce que vous avez semble fonctionner, tant qu'il n'y a qu'un seul cookie défini dans le client, avec le nom "SSO_COOKIE_NAME", le domaine "SSO_DOMAIN" et le chemin "/". S'il y a des cookies avec un chemin ou un domaine différent, vous verrez toujours le cookie envoyé au client.
Pour déboguer cela, allez dans les préférences de Firefox -> onglet Sécurité, et recherchez tous les cookies avec le SSO_COOKIE_NAME. Cliquez sur chacun pour voir le domaine et le chemin. Je parie que vous en trouverez un là-dedans qui n'est pas tout à fait ce que vous attendez.
la source
cela n'a pas fonctionné? Cela supprime tous les cookies si la réponse est renvoyée.
la source
C'est du code que j'ai effectivement utilisé auparavant, en passant
"/"
comme paramètre strPath.la source
Un cas particulier: un cookie n'a pas de chemin.
Dans ce cas, définissez le chemin comme
cookie.setPath(request.getRequestURI())
Le javascript définit le cookie sans chemin afin que le navigateur l'affiche comme cookie pour la page en cours uniquement. Si j'essaye d'envoyer le cookie expiré avec
path == /
le navigateur, deux cookies sont affichés: un expiré avecpath == /
et un autre avecpath == current page
.la source