我正在使用java Web应用程序,该应用程序不允许用户在2个不同的选项卡中打开它,我正在使用会话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工具
答案 0 :(得分:1)
作为一般提示,您最好使用response.addCookie(..)
方法,并可能使用Cookie.setMaxAge(-1)
。
也就是说,这应该是默认值,因此为了解决问题,您应该使用Firebug(或任何浏览器开发人员工具)检查您的Cookie并检查其最大年龄。关闭浏览器之前和之后。例如。你可能有一些剩余的饼干。
答案 1 :(得分:1)
实际上你应该以不同的方式设置cookie:
Cookie myCookie = new Cookie(); // create your cookie
// set path, and other attributes you need
// add the cookie to the response
response.addCookie(myCookie);
然后使Cookie
过期::
myCookie.setMaxAge(0);
另外,为了彻底清洁:
myCookie.setValue("");
myCookie.setPath("/");
因此,您必须获取请求中的所有Cookie,识别您的并使用以下内容进行清理:
List<Cookie> cookies = request.getCookies();
for (Cookie cookie : cookies) {
// identify your cookie
if (identified) {
cookie.setMaxAge(0);
cookie.setValue("");
cookie.setPath("/");
}
}
如果cookie.getName("Set-Cookie")
与您的Cookie
不符,请调试您的代码以查看response.setHeader("Set-Cookie", sCookie);