2011-11-10 5 views
5

Quiero eliminar cookies en el servidor (mediante el establecimiento de Expires al pasado). ¿Cómo puedo hacer esto con javax.ws.rs.core.NewCookie? Estoy tratando de esto, pero no funciona:Cómo eliminar una cookie en el servidor con JAX-RS NewCookie?

return Response.ok() 
    .entity("hello world!") 
    .cookie(
    new NewCookie(
     "foo", 
     "", 
     "/", 
     ".example.com", 
     1, 
     "no comment", 
     0, // maxAge 
     false 
    ) 
) 
    .build(); 

Este fragmento produce esta cabecera HTTP:

Set-Cookie:foo=;Version=1;Comment="no comment";Domain=.example.com;Path=/ 

Esta cabecera no elimina la cookie desde el servidor. ¿Qué es una posible solución?

Respuesta

8

Esto es cómo funciona (enfoque bastante sucio):

return Response.ok() 
    .header(
    "Set-Cookie", 
    "foo=deleted;Domain=.example.com;Path=/;Expires=Thu, 01-Jan-1970 00:00:01 GMT" 
); 
3

No puedo intentarlo, pero debería funcionar (dado que es una solución común para Java servlet API para eliminar cookies).

Paso 1. Obtenga acceso a HttpServletResponse. Para ello se declaran en su servicio de algo como:

@Context 
HttpServletResponse _currentResponse; 

Paso 2. Deje que la posibilidad lado del cliente para eliminar cookies por el conjunto tiempo de expiración

Cookie userCookie = new Cookie(cookieName, ""); 
_currentResponse.setContentType("text/html"); 
userCookie.setMaxAge(0); 
_currentResponse.addCookie(userCookie); 
+0

esto no funcionará b/se elimina cookies ca sólo cuando su campo expires se establece en una fecha en el pasado –

+0

@Oleg - por lo que proponer que se añada la línea para asignar fecha de galleta? – Dewfy

+0

lo siento por favor ignorar, no sabía que setMaxAge (0) realmente produciría 'Expires = Thu, 01-Ene-1970 00:00:10 GMT ' –

Cuestiones relacionadas