如何删除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);
根据the documentation关闭浏览器时,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);
答案 0 :(得分:126)
MaxAge为-1表示您希望cookie在会话期间保持不变。您想要将MaxAge设置为0。
负值表示cookie不会持久存储,并在Web浏览器退出时被删除。零值会导致cookie被删除。
答案 1 :(得分:56)
在我的环境中,以下代码有效。虽然乍看之下看起来多余,但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);
}
}
答案 2 :(得分:12)
请记住,cookie实际上是由其名称,路径和域的元组定义的。如果这三者中的任何一个不同,或者有多个同名的cookie,但定义的路径/域可能仍然对相关URL可见,您仍然会看到该cookie在请求中传递。例如。如果网址为“http://foo.bar.com/baz/index.html”,您会在bar.com或foo.bar.com上看到任何Cookie,或者路径为“/”或“/ baz”。
因此,只要客户端中只定义了一个cookie,其名称为“SSO_COOKIE_NAME”,域名为“SSO_DOMAIN”,路径为“/”,那么您看起来应该有效。如果有任何具有不同路径或域的cookie,您仍会看到发送给客户端的cookie。
要调试此功能,请进入Firefox的首选项 - > “安全”标签,并使用SSO_COOKIE_NAME搜索所有Cookie。单击每个以查看域和路径。我打赌你会在那里找到一个不太符合你的期望。
答案 3 :(得分:7)
Cookie[] cookies = request.getCookies();
if(cookies!=null)
for (int i = 0; i < cookies.length; i++) {
cookies[i].setMaxAge(0);
}
这不起作用吗?如果回复响应,这将删除所有cookie。
答案 4 :(得分:6)
这是我之前有效使用的代码,将"/"
作为strPath参数传递。
public static Cookie eraseCookie(String strCookieName, String strPath) {
Cookie cookie = new Cookie(strCookieName, "");
cookie.setMaxAge(0);
cookie.setPath(strPath);
return cookie;
}
答案 5 :(得分:1)
删除cookie的正确方法是将最长使用期限设置为0,然后将cookie添加回HttpServletResponse对象。
大多数人没有意识到或忘记将cookie重新添加到响应对象上。这样做将使其过期并立即删除Cookie。
...retrieve cookie from HttpServletRequest
cookie.setMaxAge(0);
response.addCookie(cookie);
答案 6 :(得分:0)
一个特例:cookie没有路径。
在这种情况下,将路径设置为cookie.setPath(request.getRequestURI())
javascript设置没有路径的cookie,因此浏览器仅将其显示为当前页面的cookie。如果我尝试使用path == /
发送过期的Cookie,则浏览器会显示两个Cookie:一个过期path == /
,另一个过path == current page
。