Jsp 当页面重新加载时,属性会发生什么变化?

Jsp 当页面重新加载时,属性会发生什么变化?,jsp,cookies,Jsp,Cookies,当我访问jsp页面(a)时,首先检查请求中是否存在特定属性。如果有,我会相应地设置一个cookie。因此,如果用户第一次登录,请求中显然没有属性,因此不会设置cookie。 但是,当用户来自另一个jsp(比如B),在响应中设置了属性时,就会设置cookie。在一系列这样的事件发生之后,如果我直接从url转到jsp页面A,仍然会设置一个新的cookie。这是怎么发生的。因为现在不应该有任何属性,因为我将直接进入A页。 这是我的代码。 String level=(String) request.ge

当我访问jsp页面(a)时,首先检查请求中是否存在特定属性。如果有,我会相应地设置一个cookie。因此,如果用户第一次登录,请求中显然没有属性,因此不会设置cookie。
但是,当用户来自另一个jsp(比如B),在响应中设置了属性时,就会设置cookie。在一系列这样的事件发生之后,如果我直接从url转到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);

 } 

通过在响应中发送cookie在客户端(浏览器)上设置cookie后,只要cookie中定义的路径与URL匹配且cookie未过期,即使用户关闭浏览器、重新启动浏览器并访问站点的URL,cookie始终会与每个请求一起发送到站点

在您的示例中,您将路径设置为“/”,因此cookie将随每个URL一起发送

如果希望仅为URL的特定子集发送Cookie,请相应地设置path属性。从cookie规范:

path属性用于指定域中URL的子集 cookie对其有效。如果cookie已通过域 匹配,然后将URL的路径名组件与 路径属性,如果存在匹配项,则考虑cookie 有效,并随URL请求一起发送。路径“/foo”将 匹配“/foobar”和“/foo/bar.html”。路径“/”是最通用的 路径如果未指定路径,则假定它是同一路径 如标题所描述的文档,其中包含 饼干


还请注意,cookie存储在客户端计算机的文件系统中,因此它会在浏览器重新启动时持续存在-它将与请求一起发送,即使浏览器重新启动并且您的URL被访问,只要cookie未过期且其他安全规则适用

感谢您的响应。但我认为你没有正确理解我的问题。我的问题是为什么在我的场景中每次都会设置一个新的cookie。你说的“新cookie”是什么意思?您是否在多个请求中丢失cookie的值?您可以检查浏览器中的本地cookie,以确保当前正在设置cookie。如果您可以提供有关正在设置的cookie值、浏览器中存储的内容以及请求传递的内容的更多详细信息(您可以检查firebug中的Net选项卡,查看正在传递到服务器的cookie)这将有助于通过新cookie进行诊断。我的意思是,每次刷新页面时,cookie的过期时间都会延长。好的,所以请求属性会随着每个新请求而休息。因此,每当再次访问URL时,请求属性中不会有任何内容。但是,您的服务器将有权访问cookie,因此您可以使用request.getCookie()检查cookie是否存在,而不是检查request属性。看见我想你的问题是,你正在重新发送cookie和每个响应,即使你不打算这样做,我会尝试你建议的方法。但目前的方法有什么问题。如果每个新请求都有请求属性,那么为什么每个响应都会发送cookie呢。因为只有当请求属性不为null时,cookies才会与响应一起发送。请看代码。