如何删除cookie

3

我正在尝试为我的iPhone应用程序实现注销功能,该应用程序使用jQuery mobile、客户端JS和服务器端Java。目前我需要做的是清除cookie并重定向到我的index.html中的#loginpage标签(我的HTML文件中只有一个文件,在其中有多个标签用于不同的页面)。目前我正在进行的清除Cookie的操作如下:

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,以及如何重定向到特定标签?


你可以尝试使用jQuery.cookie吗? - JacobChan
使用 $.cookie('CookieForLogin',null) 并没有起作用。 - Mitaksh Gupta
1
不要忘记执行 session.invalidate() - Sotirios Delimanolis
3个回答

5

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的SecureHTTP-only标志也适用相同的规则。如果在创建cookie时最初将其设置为true,则在删除cookie时也应将其设置为true,因为它们默认为false
话虽如此,我不确定将已登录用户存储为cookie有什么用处。这基本上也允许最终用户操纵其值。而是将已登录用户存储为会话属性,并在注销时调用session.invalidate()。"

1
我理解的是仅将maxage设置为0是不起作用的。我们还必须设置其他参数,如内容、路径等。谢谢@BalusC。 - Mitaksh Gupta

1

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。您需要设置更多属性,如路径等。 - Roshana Pitigala

0

getMaxAge

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接