web.xml 中的 session-timeout 设置已正确设置,并且 tomcat 在指定值处超时。问题是超时是如何发生的。
导航到新页面时会重置超时,但是激活浏览器(通过密钥库或鼠标单击)或进行 AJAX 调用不会重置超时。我尝试了一些 tomcat 属性无济于事,是否有处理这种类型的超时配置的属性?
先感谢您
web.xml 中的 session-timeout 设置已正确设置,并且 tomcat 在指定值处超时。问题是超时是如何发生的。
导航到新页面时会重置超时,但是激活浏览器(通过密钥库或鼠标单击)或进行 AJAX 调用不会重置超时。我尝试了一些 tomcat 属性无济于事,是否有处理这种类型的超时配置的属性?
先感谢您
您是否尝试过删除 server.xml 文件中的 connectionTimeout 参数?
即:如果你有这个:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" />
将其更改为:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="<A VERY LARGE NUMBER>" URIEncoding="UTF-8" redirectPort="8443" />
或者:
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" redirectPort="8443" />
您是否在 server.xml 文件中尝试过类似的操作?
HttpSession 是一个服务器端对象,因此 Web 浏览器中的击键和鼠标事件不会自动重置超时。但是,您可以监视客户端上的键盘和鼠标事件,并定期对服务器进行 RPC 调用以保持会话处于活动状态。
但是您还说 Ajax 调用不会重置服务器上的会话超时。这很奇怪,因为我已经做过很多次了,它确实为我重置了它。您使用的是 GWT RPC 还是其他序列化机制?
我不确定,但也许您还需要从 Ajax 调用实现访问会话以重置超时,例如通过调用getThreadLocalRequest().getSession()
(如果使用 GWT RPC)。