¿Cómo se elimina una cookie en un servlet Java?
Intenté esto: http://www.jguru.com/faq/view.jsp?EID=42225
EDITAR: Lo siguiente ahora funciona correctamente, parece ser la combinación de:
response.setContentType("text/html");
y
cookie.setMaxAge(0);
Antes de que estuviera haciendo:
//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);
Que caduca la cookie cuando el navegador se cierra según la documentación .
Un valor negativo significa que la cookie no se almacena de forma persistente y se eliminará cuando se cierre el navegador web. Un valor cero hace que la cookie se elimine.
El fragmento de trabajo completo para caducar una cookie es:
//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);
En mi entorno, el siguiente código funciona. Aunque parece redundante a primera vista,
cookies[i].setValue("");
ycookies[i].setPath("/");
son necesarios para borrar la cookie correctamente.fuente
Tenga en cuenta que una cookie se define realmente por la tupla de su nombre, ruta y dominio. Si alguno de esos tres es diferente, o si hay más de una cookie con el mismo nombre, pero definida con rutas / dominios que aún pueden ser visibles para la URL en cuestión, aún así verá que la cookie pasó en la solicitud. Por ejemplo, si la url es " http://foo.bar.com/baz/index.html ", verá las cookies definidas en bar.com o foo.bar.com, o con una ruta de "/" o "/ baz".
Por lo tanto, lo que tiene parece funcionar, siempre que solo haya una cookie definida en el cliente, con el nombre "SSO_COOKIE_NAME", el dominio "SSO_DOMAIN" y la ruta "/". Si hay cookies con una ruta o dominio diferente, aún verá la cookie enviada al cliente.
Para depurar esto, vaya a las preferencias de Firefox -> pestaña Seguridad y busque todas las cookies con SSO_COOKIE_NAME. Haga clic en cada uno para ver el dominio y la ruta. Apuesto a que encontrarás uno que no es exactamente lo que esperas.
fuente
¿eso no funcionó? Esto elimina todas las cookies si se devuelve la respuesta.
fuente
Este es un código que efectivamente he usado antes, pasando
"/"
como el parámetro strPath.fuente
Un caso especial: una cookie no tiene ruta.
En este caso, establezca la ruta como
cookie.setPath(request.getRequestURI())
El Javascript establece la cookie sin ruta para que el navegador la muestre como cookie solo para la página actual. Si trato de enviar la cookie caducada con
path == /
el navegador, se muestran dos cookies: una caducadapath == /
y otra conpath == current page
.fuente