Tomcat中的会话管理

时间:2009-12-15 04:54:31

标签: session tomcat java-ee

我开发了一个带有2个servlet A和B的简单web应用程序。

我对Tomcat的网络应用程序的会话管理有一些疑问。

注意 - 访问网络应用时,我在网络浏览器(Chrome)中禁用了Cookie。

1。)首次点击Web应用程序时,将调用Servlet A. Servlet A从请求访问会话,并执行会话哈希码的简单sysout。然后它会对 B执行 sendRedirect

[根据我的理解,由于这是第一个请求,Tomcat会将包含新会话ID的cookie发送回浏览器。但是,由于我们没有使用 HttpResponse.encodeRedirectURL()“编码”重定向网址,因此重定向网址不会包含附加到其中的会话ID。如果我在这里错了,请纠正我。]

2.。)由于我的浏览器禁用了cookie,它将忽略在cookie中发回的会话ID,并向重定向URL发出新请求(也没有附加会话ID)。 / p>

3。)新请求导致调用servlet B,同时访问请求会话并执行会话哈希码的sysout。

令我困惑的是,Servlet A和B都输出相同的会话哈希码,这意味着它们从两个请求中获得相同的会话。

即使没有发送会话ID,浏览器的第二个请求如何映射到与之前相同的会话?

谢谢!

3 个答案:

答案 0 :(得分:2)

在请求之间传递会话只有两种方法:Cookie和URL重写。如果您在URL中未看到会话ID,则必须是cookie。

您确定Cookie被禁用了吗?从HTTP标头跟踪中可以很容易地看到它。

答案 1 :(得分:2)

您确定已禁用“内存中”Cookie吗?通常,浏览器会允许您禁用保存到磁盘的持久性cookie,但它们仍然允许内存cookie中的瞬态,这些cookie仅在浏览器会话期间保持驻留。

我建议使用Wireshark来分析HTTP流。这样您就可以看到浏览器发送和接收的cookie。

答案 2 :(得分:0)

这很奇怪。

当我昨天测试应用程序时,它表现出类似于我所描述的行为。但是,当我现在测试应用程序时,它表现得非常完美,正如我所期望的那样。

原因可能是我在禁用cookie后没有重新启动浏览器会话。

如果我再次遇到相同的行为,会让你们知道。

感谢您的时间!

相关问题