在我正在研究的Web应用程序(Servlet-JSP MVC)中,我将会话超时设置为-1,这意味着会话永远不会过期,直到在注销期间故意无效。
<session-config>
<session-timeout>-1</session-timeout>
</session-config>
但是如果用户保持空闲状态(即应用程序没有活动),然后在一段时间后刷新应用程序,则会话过期。
我正在将Apache Tomcat 7.0与XAMPP一起用于我的应用程序。
可能是什么原因?可以做些什么来使会话无限期地保持活力?什么&#34; -1&#34;在session-timeout标签中实际意味着什么?
答案 0 :(得分:0)
更好的方法是使用ajax
调用来刷新会话,但不要将会话超时设置得太长,因为用户可以在不退出的情况下关闭浏览器,然后会话实体将保留在内存中但永远不会被使用再次。
您设置不起作用可能是由于这三个地方的设置冲突造成的:
(1)Java代码
session.setMaxInactiveInterval(600);
(2)webapp&#39; s web.xml
(3)Contianer(tomcat?)设置conf/web.xml
或Catalina/localhost/yourapp/context.xml
或server.xml
或您应用的子模块中的事件。
<Context path="/" docBase="/yourapp/base"
defaultSessionTimeOut="3600" ... />
优先级(1)&gt;(2)&gt;(3)
---- ---- EDIT
根据tomcat 7文档,如果您使用SSL(https://tomcat.apache.org/tomcat-7.0-doc/config/http.html)
sessionTimeout
创建SSL会话后的时间(以秒为单位),它将超时。使用0指定无限制超时。如果未指定,则使用&gt;默认值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);
}
设置为0或-1的session-timeout
将具有相同的结果