首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java Servlet中删除Cookie

问如何在Java Servlet中删除Cookie
EN

Stack Overflow用户
提问于 2009-05-21 08:41:47
回答 8查看 225.3K关注 0票数 144

如何删除Java servlet中的cookie?

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

编辑:下面的代码现在可以正常工作了,它看起来像是以下命令的组合:

代码语言:javascript
复制
response.setContentType("text/html");

和

代码语言:javascript
复制
cookie.setMaxAge(0);

在我这样做之前:

代码语言:javascript
复制
//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负值表示

不会永久存储,并将在浏览器退出时删除。零值将导致删除cookie。

使cookie过期的完整工作代码片段为:

代码语言:javascript
复制
//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);
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-05-21 01:36:37

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

从API documentation

cookie负值表示

不会永久存储,并将在浏览器退出时删除。零值将导致删除cookie。

票数 144
EN

Stack Overflow用户

发布于 2012-06-29 16:51:58

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

代码语言:javascript
复制
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);
        }
}
票数 67
EN

Stack Overflow用户

发布于 2009-05-21 01:33:45

请记住,cookie实际上是由其名称、路径和域的元组定义的。如果这三个中的任何一个是不同的,或者有多个同名的cookie,但定义的路径/域对于有问题的URL仍然可见,您仍然会看到该cookie在请求中传递。例如,如果url是"http://foo.bar.com/baz/index.html",您将看到在bar.com或foo.bar.com上定义的任何cookie,或者路径为"/“或"/baz”的cookie。

因此,只要客户端中只定义了一个cookie,名称为"SSO_COOKIE_NAME",域为"SSO_DOMAIN",路径为"/“,那么您所拥有的cookie看起来应该可以工作。如果有任何cookie具有不同的路径或域,您仍然会看到发送到客户端的cookie。

要对此进行调试,请进入火狐的首选项cookie安全选项卡,并使用SSO_COOKIE_NAME搜索所有->。单击每个以查看域和路径。我敢打赌,你会在那里找到一个不完全是你所期望的。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/890935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档