Tomcat的会话超时可以在多个级别上设置:tomcat实例级别、Web应用级别、servlet级别以及运行时Context代码级别。 较低级别的设定会覆盖较高级别的设定。
Tomcat可以在以下几个地方设置session超时:
1 Web容器级别
在conf/web.xml中
- <!-- ==================== Default Session Configuration ================= -->
- <!-- You can set the default session timeout (in minutes) for all newly -->
- <!-- created sessions by modifying the value below. -->
- <session-config>
- <session-timeout>30</session-timeout>
- </session-config>
<!-- ==================== Default Session Configuration ================= --> <!-- You can set the default session timeout (in minutes) for all newly --> <!-- created sessions by modifying the value below. --> <session-config> <session-timeout>30</session-timeout> </session-config>
这里是以分钟为单位的,默认是30分;
2 webapp级别
在webapp中的 WEB-INF/web.xml
- <!-- 配置Session失效时间 -->
- <session-config>
- <session-timeout>30</session-timeout>
- </session-config>
<!-- 配置Session失效时间 --> <session-config> <session-timeout>30</session-timeout> </session-config>
也是以min为单位;
3 应用程序代码中:硬编码
- session.setMaxInactiveInterval(30*60);//以秒为单位
session.setMaxInactiveInterval(30*60);//以秒为单位
优先级,越细粒度优先级越高,也就是3>2>1
4 还要一种配置,但现在比较少见了,因为需要将Context配置在server.xml里:
这就是修改conf/server.xml
- <Context path="/test" docBase="/home/httpd/html/test"
- defaultSessionTimeOut="3600" isWARExpanded="true"
- isWARValidated="false" isInvokerEnabled="true"
- isWorkDirPersistent="false"/>
<Context path="/test" docBase="/home/httpd/html/test" defaultSessionTimeOut="3600" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/>
单位为秒
附:
重启时保持会话
在关闭Tomcat实例/取消Web应用部署时,缺省会把当前的活动会话保存到硬盘上,并在重启启动/部署 时在把会话从硬盘上加载到内存中。
文件保存在各目录下的SESSIONS.SER中。有时可能会话中保存了敏感信息,或者不希望使用这个特 性,可以配置Context.xml文件关闭这个选项。
配置 manager.pathname == ""即可,形如:
<Manager pathname="" />
大家好:
很高兴自己在不断学习的过程中,积累知识和经验。也能够为了正在学习的网友们提供好的资料,一起学习,一起努力。成就自己的梦想.............