更好的方法是使用ajax 调用来刷新会话,但不要将会话超时设置得太长,因为用户可以在不退出的情况下关闭浏览器,然后会话实体将保留在内存中但永远不会再次使用。
您的设置不起作用可能是这三个地方的设置冲突造成的:
(1) Java 代码
session.setMaxInactiveInterval(600);
(2) webapp 的web.xml
(3) Contianer 的 (tomcat?) 设置 conf/web.xml 或 Catalina/localhost/yourapp/context.xml 或 server.xml 或您应用的子模块 jar 中的事件。
<Context path="/" docBase="/yourapp/base"
defaultSessionTimeOut="3600" ... />
优先级(1)>(2)>(3)
————编辑————
根据 tomcat 7 文档,如果您使用 SSL (https://tomcat.apache.org/tomcat-7.0-doc/config/http.html)
会话超时
在创建 SSL 会话之后它将超时的时间(以秒为单位)。使用 0 指定无限超时。如果未指定,则使用 >默认值 86400(24 小时)。
使用 0 指定无限超时
这个链接JSESSIONID Cookie with Expiration Date in Tomcat和这个https://stackoverflow.com/a/13463566/1484621值得一看
测试session的正确方法是request.getSession(false) == null,或者request.getSession(true).isNew()。
根据源码
/**
* Set the default session timeout (in minutes) for this
* web application.
*
* @param timeout The new default session timeout
*/
@Override
public void setSessionTimeout(int timeout) {
int oldSessionTimeout = this.sessionTimeout;
/*
* SRV.13.4 ("Deployment Descriptor"):
* If the timeout is 0 or less, the container ensures the default
* behaviour of sessions is never to time out.
*/
this.sessionTimeout = (timeout == 0) ? -1 : timeout;
support.firePropertyChange("sessionTimeout",
oldSessionTimeout,
this.sessionTimeout);
}
session-timeout 设置为 0 或 -1 将得到相同的结果