example - ¿Cómo se elimina una cookie en un Servlet de Java?
login cookies java (6)
¿Cómo se elimina una cookie en un servlet de Java?
Intenté esto: http://www.jguru.com/faq/view.jsp?EID=42225
EDITAR: El siguiente ahora funciona con éxito, parece ser la combinación de:
response.setContentType("text/html");
y
cookie.setMaxAge(0);
Antes de que yo 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 está cerrado según la documentación .
Un valor negativo significa que la cookie no se almacena de manera persistente y se eliminará cuando el navegador web salga. Un valor cero hace que la cookie sea eliminada.
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);
El MaxAge de -1 indica que desea que la cookie persista durante la sesión. Desea establecer MaxAge en 0 en su lugar.
De la documentación API :
Un valor negativo significa que la cookie no se almacena de manera persistente y se eliminará cuando el navegador web salga. Un valor cero hace que la cookie sea eliminada.
En mi entorno, el siguiente código funciona. Aunque parece redundante a primera vista, las cookies[i].setValue("");
y cookies[i].setPath("/");
son necesarios para borrar la cookie correctamente
private void eraseCookie(HttpServletRequest req, HttpServletResponse resp) {
Cookie[] cookies = req.getCookies();
if (cookies != null)
for (Cookie cookie : cookies) {
cookie.setValue("");
cookie.setPath("/");
cookie.setMaxAge(0);
resp.addCookie(cookie);
}
}
Este es un código que he usado efectivamente antes, pasando "/"
como el parámetro strPath.
public static Cookie eraseCookie(String strCookieName, String strPath) {
Cookie cookie = new Cookie(strCookieName, "");
cookie.setMaxAge(0);
cookie.setPath(strPath);
return cookie;
}
Tenga en cuenta que una cookie está realmente definida por la tupla de su nombre, ruta y dominio. Si alguno de esos tres es diferente, o si hay más de una cookie del mismo nombre, pero está definida con rutas / dominios que aún pueden estar visibles para la URL en cuestión, igual verá la cookie pasada en la solicitud. Por ejemplo, si la URL es " http://foo.bar.com/baz/index.html ", verá cookies definidas en bar.com o foo.bar.com, o con una ruta de "/" o "/ baz".
Por lo tanto, parece que debería 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, igual verá la cookie enviada al cliente.
Para solucionar este problema, 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 allí que no es exactamente lo que estás esperando.
Un caso especial: una cookie no tiene camino.
En este caso, establezca la ruta como cookie.setPath(request.getRequestURI())
JavaScript establece la cookie sin ruta, por lo que el navegador la muestra como cookie solo para la página actual. Si trato de enviar la cookie caducada con path == /
el navegador muestra dos cookies: una expiró con path == /
y otra con path == current page
.
Cookie[] cookies = request.getCookies();
if(cookies!=null)
for (int i = 0; i < cookies.length; i++) {
cookies[i].setMaxAge(0);
}
¿Eso no funcionó? Esto elimina todas las cookies si la respuesta se envía de vuelta.