我有一个使用Stripes和Apache Shiro库的webapp来保证安全。
在我的本地Windows Tomcat 6.0.33安装上,一切正常。但是,当我在主机DailyRazor上的Linux上运行Tomcat 6.0.16上的应用程序时,我可以看到Tomcat定期为同一个用户/会话生成一个新线程,因此用户丢失了他们的凭据并被要求登录试。
在Jetty下运行时,我的开发箱也注意到了这一点。
我不认为这是一个非活动超时问题,因为我给webapp的命中是顺序的,除了不同的次要版本之外,Tomcat配置中的某些东西可能有所不同吗?
或者,是否有一种简单的方法来调试会话信息(因为它没有出现在我的网址中)?
答案 0 :(得分:3)
只是为了使它比在注释中更清晰:每个HTTP请求都将由任意线程处理。 Tomcat(和其他应用服务器)使用一个线程池,从池中选择一个线程,执行请求,并将线程返回池中。
HTTP会话与线程完全正交:来自同一会话的多个请求可能由不同的线程处理。线程执行来自多个会话的请求。通常会有比池中的线程更多的并行会话。最后,你可能有两个线程为同一个会话执行两个请求。这意味着存储在会话中的对象应该是线程安全的,或者应该使用同步机制来访问存储在会话中的非线程安全对象。
此外,给定浏览器的多个框架或标签共享相同的HTTP会话。如果您启动其他浏览器(例如,除Firefox之外的Chrome),或者您在另一台计算机上使用浏览器,则会有不同的会话。