我开发了一个简单的 Web 应用程序,其中包含 2 个 servlet A 和 B。
我对 Tomcat 的网络应用程序的会话管理有一些疑问。
注意 - 在访问网络应用程序时,我在网络浏览器 (Chrome) 中禁用了 cookie。
1.) 当第一次访问 Web 应用程序时,Servlet A 被调用。 Servlet A 通过请求访问会话并对会话哈希码执行简单的 sysout。然后它会执行一个发送重定向到 servlet B。
[根据我的理解,由于这是第一次请求,Tomcat 会将包含新会话 ID 的 cookie 发送回浏览器。然而,由于我们没有使用“编码”重定向 URLHttpResponse.encodeRedirectURL(),重定向 URL 将不包含附加的会话 ID。如果我这里错了,请纠正我。]
2.) 由于我的浏览器中禁用了 cookie,因此它将忽略 cookie 中发回的会话 ID,并向重定向 URL 发出新请求(该 URL 也没有附加会话 ID)。
3.) 新请求导致 servlet B 被调用,servlet B 也访问请求会话并执行会话哈希码的 sysout。
让我困惑的是,Servlet A 和 B 都输出相同的会话哈希码,这意味着它们从两个请求中获得相同的会话。
即使没有发送会话 ID,来自浏览器的第二个请求如何映射到与之前相同的会话?
Thanks !
在请求之间传递会话的方式只有两种:Cookie 和 URL 重写。如果您在 URL 中没有看到会话 ID,则它一定是 cookie。
你确定cookie被禁用了吗?从 HTTP 标头跟踪中应该很容易看出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)