【发布时间】:2015-04-16 23:33:25
【问题描述】:
我正在使用一个不允许用户在 2 个不同选项卡中打开它的 Java Web 应用程序,为此我正在使用会话 cookie。在大多数情况下似乎都可以正常工作,但问题是浏览器退出时没有清除 cookie。这就是我设置 cookie 的方式:
String sCookie = "mycookie=true;Path=/;Domain=.mydomain.com;HttpOnly";
if (!response.containsHeader("Set-Cookie")) {
response.setHeader("Set-Cookie", sCookie);
} else {
response.addHeader("Set-Cookie", sCookie);
}
据我了解,如果我不指定 Expires 字段,则应在浏览器关闭时删除 cookie。这就是我验证 cookie 是否存在的方式:
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if ("mycookie".equals(cookie.getName()) && Boolean.valueOf(cookie.getValue())) {//some error}}
这段代码有问题吗?意思是,我可以用response.setHeader 设置cookie,然后用request.getCookies() 进行检查吗?
有时我在手动删除 cookie 时遇到问题,然后当我重新启动浏览器时问题仍然存在。
这就是我手动删除 cookie 的方式(在标签关闭时):
String sCookie = "mycookie=;Path=/;Domain=.mydomain.com;HttpOnly";
if (!response.containsHeader("Set-Cookie")) {
response.setHeader("Set-Cookie", sCookie);
} else {
response.addHeader("Set-Cookie", sCookie);
}
提前致谢
更新
这就是我创建 cookie 的方式:
Cookie c = new Cookie("mycookie","true");
c.setDomain(".mydomain.com");
c.setPath("/");
c.setValue("true");
response.addCookie(c);
这就是我删除 cookie 的方式:
for (Cookie c : request.getCookies()) {
if ("mycookie".equals(c.getName())) {
c.setMaxAge(0);
c.setValue("");
}
}
但仍然无法正常工作。实际上,现在当我关闭选项卡时 cookie 没有被删除(这在我以前的版本中使用“Set-Cookie”:S 运行良好)。另一个细节是我在 Chrome 开发人员的资源选项卡中没有看到我的 cookie工具
【问题讨论】:
-
你在使用 Chrome 吗?
-
嗨 @MauricePerry,是的,我正在使用 Chrome、Internet Explorer 10 和 Firefox 进行测试
-
这里有一个帖子可能会有所帮助:stackoverflow.com/questions/10617954/…
-
你试过
c.setDomain("");吗? -
mmm 不应与创建@JordiCastilla 中指定的域相同?