2011-11-10 43 views
5

Tôi muốn xóa cookie trên máy chủ (bằng cách đặt Expires trước đây). Làm cách nào tôi có thể thực hiện việc này với javax.ws.rs.core.NewCookie? Tôi đang cố gắng này, nhưng nó không hoạt động:Làm cách nào để xóa cookie trên máy chủ bằng JAX-RS NewCookie?

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

đoạn này tạo ra HTTP header này:

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

Tiêu đề này sẽ không xóa cookie từ máy chủ. Giải pháp có thể là gì?

Trả lời

8

Đây là cách nó hoạt động (cách tiếp cận khá bẩn):

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

Tôi không thể thử đề xuất, nhưng nó sẽ hoạt động (vì nó là công việc chung cho java servlet API để xóa cookie).

Bước 1. Nhận quyền truy cập vào HttpServletResponse. Để làm điều đó tuyên bố trong một cái gì đó dịch vụ của bạn như:

@Context 
HttpServletResponse _currentResponse; 

Bước 2. Hãy để cho cơ hội phía khách hàng để xoá cookie bằng cách thiết lập thời gian hết hạn

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

Cookie này sẽ không hoạt động khi cookie hết hạn được đặt thành ngày trong quá khứ –

+0

@Oleg - vì vậy bạn đề xuất thêm dòng để gán ngày cookie? – Dewfy

+0

xin lỗi xin vui lòng bỏ qua, tôi không biết rằng setMaxAge (0) thực sự sẽ sản xuất 'Hết hạn = Thu, 01-Jan-1970 00:00:10 GMT ' –

Các vấn đề liên quan