如何在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);