2013-11-27 72 views
4

我在从我的servlet代码中删除cookie时遇到问题。鉴于波纹管是我的代码。Java Servlet:Cookie不会被删除

private void clearCookies(HttpServletRequest req, HttpServletResponse resp) { 
    Cookie[] cookies = req.getCookies(); 

    for (Cookie curCookie : cookies) {   
     curCookie.setValue(null); 
     curCookie.setMaxAge(0); 
     curCookie.setPath("/"); 
     resp.addCookie(curCookie);   
    } 
} 

我在这个方法调用后做了一个resp.sendRedirect(url)。然而,并非所有的cookies都会被删除,例如这个cookie永远不会被删除。

Name: reqURI 
Content: ../../webapp/index.jsp 
Domain: mgt.appserver.com 
Path: /
Send for: Any kind of connection 
Accessible to script: Yes 
Created: Tuesday, November 26, 2013 4:35:19 PM 
Expires: When the browsing session ends 

有没有人知道我在这里失踪了什么?我读了Java Cookie对象文档,并根据该值0应使cookie被删除。但事实并非如此。我尝试了更多的建议,但都没有成功。我试着用谷歌浏览器和火狐浏览器,所以不能相信这是浏览器的问题。我不知道为什么这样一个通用的东西没有适当的文档记录和Java语言的语言。

回答

7

更新

Problem removing cookie in servlet

的路径和域名,当你在Java中检索cookie,因为他们只需要在客户端浏览器的响应会一直为空。但是,如果您处于相同的安全域(不管路径),您仍然有权删除它们。不幸的是,因为路径没有包含在内,所以你不能明确地知道这个路径就不能删除这个cookie。简单地使用相同的cookie名称,但不同的路径将不起作用。这些被认为是两个不同的cookie,你会发现,不是删除cookie,而是在不同的路径上创建另一个。

所以,你不应该改变的值或路径,因为这将创建一个新的Cookie

+1

此代码解决了问题,我认为创建一个全新的cookie并将其添加到响应中解决了问题。路径应该与原始值完全相同。将maxAge设置为0也很重要。 Cookie cookie = new Cookie(“reqURI”,null); cookie.setPath(“/”); cookie.setMaxAge(0); resp.addCookie(cookie); – SureshAtt

0

你在哪里重定向?响应必须首先提交给创建cookie的主机,以便将其移除。另外,您不需要将该值设置为空。

+1

相同的webapp设置cookie并从同一个webapp中的不同servlet中移除。 – SureshAtt