如何删除Java Servlet中的Cookie

如何删除Java servlet中的cookie?

我试过这个: http : //www.jguru.com/faq/view.jsp?EID=42225

编辑:下面现在成功地工作,它似乎是以下组合:

response.setContentType("text/html"); 

 cookie.setMaxAge(0); 

在我做之前:

 //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); 

根据文档closures浏览器时,cookie将过期。

负值意味着cookie不会永久存储,并且在Web浏览器退出时将被删除。 零值会导致Cookie被删除。

完整的工作片段过期的cookie是:

 //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); 

MaxAge的-1表示您希望Cookie在会话期间持续存在。 您想要将MaxAge设置为0。

从API文档 :

负值意味着cookie不会永久存储,并且在Web浏览器退出时将被删除。 零值会导致Cookie被删除。

在我的环境中,下面的代码工作。 虽然看起来多余乍一看, cookies[i].setValue("");cookies[i].setPath("/"); 必须正确清除cookie。

 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); } } 

请记住,Cookie实际上是由其名称,path和域的元组定义的。 如果三者中的任何一个不同,或者存在多个同名的Cookie,但使用的path/域可能仍然对该URL可见,那么您仍然会看到该cookie传递给请求。 例如,如果url是“ http://foo.bar.com/baz/index.html ”,你会看到任何在bar.com或foo.bar.com上定义的cookies,或者path为“/”或“/巴兹”。

因此,只要客户端中只定义了一个cookie,名称为“SSO_COOKIE_NAME”,域为“SSO_DOMAIN”,path为“/”,那么看起来应该起作用。 如果有不同的path或域的cookie,你仍然会看到发送给客户端的cookie。

要进行debugging,请进入Firefox的首选项 – >安全选项卡,然后使用SSO_COOKIE_NAMEsearch所有Cookie。 点击每个查看域和path。 我打赌你会在那里find一个不是你所期待的。

这是我之前有效使用的代码,通过"/"作为strPath参数。

 public static Cookie eraseCookie(String strCookieName, String strPath) { Cookie cookie = new Cookie(strCookieName, ""); cookie.setMaxAge(0); cookie.setPath(strPath); return cookie; } 
 Cookie[] cookies = request.getCookies(); if(cookies!=null) for (int i = 0; i < cookies.length; i++) { cookies[i].setMaxAge(0); } 

那没用吗? 如果响应被发回,这将删除所有cookie。