如何在Java Web应用程序中dynamic设置会话超时?
我需要给我的用户一个Web界面来改变会话超时间隔。 因此,不同的Web应用程序的安装将能够有不同的会话超时,但他们的web.xml
不能不同。
有没有办法以编程方式设置会话超时,以便我可以使用,比如ServletContextListener.contextInitialized()
读取configuration的时间间隔,并在应用程序启动时进行设置?
非常感谢。
而不是使用ServletContextListener,使用HttpSessionListener 。 在sessionCreated()
方法中,可以以编程方式设置会话超时。
public class MyHttpSessionListener implements HttpSessionListener{ public void sessionCreated(HttpSessionEvent event){ event.getSession().setMaxInactiveInterval(15*60); //in seconds } public void sessionDestroyed(HttpSessionEvent event){} }
不要忘记在部署描述符中定义监听器:
<webapp> ... <listeners> <listener-class>com.example.MyHttpSessionListener</listener-class> </listeners> </webapp>
不过,我build议为每个应用程序创build不同的web.xml文件,并在那里定义会话超时:
<webapp> ... <session-config> <session-timeout>15</session-timeout> <!-- in minutes --> </session-config> </webapp>
有没有办法以编程方式设置会话超时
基本上有三种方法来设置会话超时值:
- 通过使用标准
web.xml
文件中的session-timeout
web.xml
或〜 - 在没有这个元素的情况下,通过获取服务器的默认
session-timeout
值(从而在服务器级configuration它)〜或〜 - 通过使用
HttpSession. setMaxInactiveInterval(int seconds)
编程HttpSession. setMaxInactiveInterval(int seconds)
您的Servlet或JSP中的HttpSession. setMaxInactiveInterval(int seconds)
方法。
但是请注意,后面的选项设置当前会话的超时值,这不是全局设置。
正如另一位游客告诉的,你可以在Session Listener中进行更改。 但是,例如,您可以直接在您的servlet中进行更改。
getRequest().getSession().setMaxInactiveInterval(123);