2011-11-10 5 views
5

Chcę usunąć plik cookie na serwerze (za pomocą ustawienia Expires do przeszłości). Jak mogę to zrobić z javax.ws.rs.core.NewCookie? Próbuję to, ale to nie działa:Jak usunąć plik cookie na serwerze za pomocą JAX-RS NewCookie?

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

Ten fragment produkuje ten nagłówek HTTP:

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

tego nagłówka nie usuwa cookie z serwera. Jakie jest możliwe obejście tego problemu?

Odpowiedz

8

Jak to działa (raczej brudny sposób):

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

Nie mogę spróbować zaproponować, ale powinno działać (ponieważ jest to powszechna praca dla API serwletów Java w celu usunięcia cookie).

Krok 1. Uzyskaj dostęp do HttpServletResponse. Aby zrobić to zadeklarować w czymś usług takich jak:

@Context 
HttpServletResponse _currentResponse; 

kroku 2. Daj szansę po stronie klienta do usuwania plików cookie przez ustawiony czas ważności

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

To nie zadziała b/ca ciasteczko zostanie usunięty tylko wtedy, gdy jego Expires pole jest ustawione na randkę w minionym –

+0

@Oleg - więc proponuję, aby dodać linię przypisać datę Cookie? – Dewfy

+0

Przepraszam, proszę, zignoruj, nie wiedziałem, że setMaxAge (0) będzie faktycznie produkować 'Expires = Thu, 01-Jan-1970 00:00:10 GMT ' –

Powiązane problemy