我在Tomcat中运行J2EE Web应用程序,最近我的任务是向应用程序添加指标。我正在使用SessionListener来检测会话何时被销毁,然后将指标上传到数据库。我的会话超时在我的web.xml中设置为30分钟,我没有以编程方式在任何地方使会话无效。通常在我登录测试的15-10分钟内,我会看到上传到数据库的3到4组指标,所有指标都有不同的会话ID。
除了web.xml和session.invalidate()之外,还有什么可以导致Tomcat中的会话被销毁?例外? Tomcat会不会随意使会话无效?
答案 0 :(得分:4)
您的webbrowser可能已经决定不会将请求发送到Web应用程序,而您的应用程序可能会在该应用程序中发送。 我已经看到这种情况发生在apache重写规则中;会话cookie路径之外的URL被重定向到Web应用程序。有类似于下面发生的事情(细节可能是错误的):
如果您记录新会话的初始网址,您应该能够看到这是否会导致您的问题。
答案 1 :(得分:0)
这可能不是您服务器上发生的情况,但如果在服务器上设置了系统时间,则会导致会话的到期时间超过30分钟的“已用时间”。 Tomcat - 至少从5.5开始 - 使用“时钟时间”来使会话到期,因此更改系统时钟将影响会话生存期。