如何删除 cookie
Posted
技术标签:
【中文标题】如何删除 cookie【英文标题】:How to remove a cookie 【发布时间】:2013-04-04 19:10:15 【问题描述】:我正在尝试为我的 iPhone 应用程序实现注销功能,该应用程序使用 jQuery 移动、客户端的 JS 和服务器端的 java。目前我要做的是清除 cookie 并重定向到我的 index.html 中的 #loginpage 标记(我只有 1 个 HTML 文件,其中不同页面有多个标记)。到目前为止,我正在为 clearCookie 做的是:
Cookie readCookie = null;
for (Cookie cookie : httpRequest.getCookies())
if (cookie.getName().equals("CookieForLogin"))
readCookie = cookie;
break;
readCookie.setMaxAge(0);
httpResponse.addCookie(readCookie);
但是这段代码并没有清除 cookie。我已经尝试过 JS 方法,即将到期日期设置为以前的某个日期,在网上给出,但它们也不起作用。我也没有HttpServletResponse
的响应方法。如何清除在客户端设置的 cookie 以及如何重定向到特定标签?
【问题讨论】:
你可以尝试使用 juery.cookie 吗? 使用 $.cookie('CookieForLogin',null) 不起作用。 别忘了session.invalidate()
【参考方案1】:
Cookie 与特定路径相关联。您需要确保在删除 cookie 期间设置与创建 cookie 期间相同的路径。它默认为 URL 中当前请求的文件夹(因此只能在同一文件夹或其所有子文件夹中使用)。您最好明确指定路径,否则它将取决于 URL 中当前请求的文件夹。 cookie 路径信息就像 maxage 一样,在请求 cookie 标头中不可用。
假设您按如下方式创建了 cookie,
Cookie cookie = new Cookie("CookieForLogin", cookieForLogin);
cookie.setPath("/somePath");
cookie.setMaxAge(maxAgeInSeconds);
// ...
response.addCookie(cookie);
需要按如下方式删除:
Cookie cookie = new Cookie("CookieForLogin", null);
cookie.setPath("/somePath");
cookie.setMaxAge(0);
// ...
response.addCookie(cookie);
/somePath
只是示例。您也可以只使用/
,只要在两种情况下都相同即可。
注意,这同样适用于 cookie 的 Secure 和 HTTP-only 标志。如果您在创建 cookie 期间最初将其设置为 true
,那么您还应该在删除 cookie 期间将其设置为 true
,即默认为 false
。
也就是说,我不确定将登录用户存储为 cookie 有什么用处。您基本上还允许最终用户操纵其价值。而是将登录用户存储为会话属性,并在注销时调用session.invalidate()
。
【讨论】:
我所理解的只是将 maxage 设置为 0 是行不通的。我们还必须设置其他参数,如内容、路径等。谢谢@BalusC【参考方案2】:
void setMaxAge(int expiry)
我们可以使用setMaxAge()
的方法删除cookie
Cookie c = new Coookie("x", "10");
如果你将 maxage 设置为 0
c.setMaxAge(0); //it causes the cookie to be deleted.
如果你将 maxage 设置为负值
c.setMaxAge(-1);
// cookie is not stored persistently and will be deleted end of the browsing session.
【讨论】:
但这并不实用,在某些情况下仅设置最大年龄不会删除 cookie。您必须设置更多属性,例如路径等。【参考方案3】:获取最大年龄
public int getMaxAge() 获取此 Cookie 的最大年龄(以秒为单位)。 默认返回-1,表示cookie会一直持续到浏览器关闭。
返回: 一个整数,以秒为单位指定 cookie 的最大年龄;如果为负,则表示 cookie 一直存在到浏览器关闭 也可以看看: setMaxAge(int)
//Java API 文档
简而言之,您需要设置 cookie 年龄:
A negative value means that the cookie is not stored persistently and will be deleted when the Web browser exits.
A zero value causes the cookie to be deleted.
Cookie killMyCookie = new Cookie("mycookie", null);
killMyCookie.setMaxAge(0);
killMyCookie.setPath("/");
response.addCookie(killMyCookie);
【讨论】:
以上是关于如何删除 cookie的主要内容,如果未能解决你的问题,请参考以下文章