我开发了一个带有2个servlet A和B的简单web应用程序。
我对Tomcat的网络应用程序的会话管理有一些疑问。
注意 - 访问网络应用时,我在网络浏览器(Chrome)中禁用了Cookie。
1。)首次点击Web应用程序时,将调用Servlet A. Servlet A从请求访问会话,并执行会话哈希码的简单sysout。然后它会对
[根据我的理解,由于这是第一个请求,Tomcat会将包含新会话ID的cookie发送回浏览器。但是,由于我们没有使用 HttpResponse.encodeRedirectURL()“编码”重定向网址,因此重定向网址不会包含附加到其中的会话ID。如果我在这里错了,请纠正我。]
2.。)由于我的浏览器禁用了cookie,它将忽略在cookie中发回的会话ID,并向重定向URL发出新请求(也没有附加会话ID)。 / p>
3。)新请求导致调用servlet B,同时访问请求会话并执行会话哈希码的sysout。
令我困惑的是,Servlet A和B都输出相同的会话哈希码,这意味着它们从两个请求中获得相同的会话。
即使没有发送会话ID,浏览器的第二个请求如何映射到与之前相同的会话?
谢谢!
答案 0 :(得分:2)
在请求之间传递会话只有两种方法:Cookie和URL重写。如果您在URL中未看到会话ID,则必须是cookie。
您确定Cookie被禁用了吗?从HTTP标头跟踪中可以很容易地看到它。
答案 1 :(得分:2)
您确定已禁用“内存中”Cookie吗?通常,浏览器会允许您禁用保存到磁盘的持久性cookie,但它们仍然允许内存cookie中的瞬态,这些cookie仅在浏览器会话期间保持驻留。
我建议使用Wireshark来分析HTTP流。这样您就可以看到浏览器发送和接收的cookie。
答案 2 :(得分:0)
这很奇怪。
当我昨天测试应用程序时,它表现出类似于我所描述的行为。但是,当我现在测试应用程序时,它表现得非常完美,正如我所期望的那样。
原因可能是我在禁用cookie后没有重新启动浏览器会话。
如果我再次遇到相同的行为,会让你们知道。
感谢您的时间!