当我来到jsp页面(A)时,首先我检查请求中是否存在特定属性。如果有,我会相应地设置一个cookie。因此,如果用户第一次登录,请求中显然没有属性,因此不会设置cookie。
但是当用户来自另一个jsp(比如B),其中已在响应中设置了属性,那么将设置cookie。在发生了一系列这样的事件后,如果我直接从网址转到jsp页面A,仍然会设置一个新的cookie。怎么会发生这种情况。因为现在我不应该有任何属性,因为我要直接进入A页
这是我的代码。
String level=(String) request.getAttribute("level");
if(level!=null)
{
Cookie cookie=new Cookie("level",level);
cookie.setMaxAge(60*2);
cookie.setPath("/");
response.addCookie(cookie);
}
答案 0 :(得分:1)
通过在响应中发送cookie在客户端(浏览器)上设置cookie后,只要cookie中定义的路径与URL匹配且cookie不匹配,它就会随每个请求一起发送到您的站点即使用户关闭浏览器,重新启动它并访问您网站的网址
,也已过期在您的示例中,您将路径设置为“/”,因此Cookie将与每个网址一起发送。
如果您希望仅为URL的特定子集发送Cookie,请相应地设置路径属性。来自http://curl.haxx.se/rfc/cookie_spec.html的Cookie规范:
path属性用于指定域中URL的子集 cookie的有效期。如果cookie已经通过域名 匹配,然后将URL的路径名组件与。进行比较 path属性,如果匹配,则考虑cookie 有效,并与URL请求一起发送。路径“/ foo”会 匹配“/ foobar”和“/foo/bar.html”。路径“/”是最通用的 路径。如果未指定路径,则假定它是相同的路径 由包含该标题的标题描述的文档 cookie中。
另请注意,cookie存储在客户端计算机的文件系统中,因此它会在浏览器重新启动后持续存在 - 即使重新启动浏览器并且访问了您的URL,它也会随请求一起发送,只要cookie未过期和其他安全规则适用