有没有办法通过做一些调整在web.xml中以秒为单位设置会话超时?

时间:2014-04-11 09:13:50

标签: java tomcat

我要求将会话超时设置为40秒。我知道我们通常保持20分钟。但我目前的应用程序要求是将会话超时保持为40秒的秒数。 web.xml仅将整数值设为1,但不是0.6。有没有办法写这个?我们在Apache tomcat服务器上运行我们的Java Web应用程序。

我能在web.xml中设置的最小值是1分钟,如:

<session-config>
    <session-timeout>1</session-timeout>
</session-config>

我可以使用session.setMaxInactiveInterval(40)将会话超时设置为40秒;但是session.setMaxInactiveInterval(40);仅在用户打开网站时才有效。但是一旦用户关闭网站session.setMaxInactiveInterval方法将无法工作,默认的web.xml将获得控制权并再次将会话时间设置为1分钟。

有没有办法通过做一些调整在web.xml中以秒为单位设置会话超时?

1 个答案:

答案 0 :(得分:1)

据我所知,web.xml仅允许分钟。如果您想使用秒,则必须通过在HttpSessionListener中注册自定义web.xml(或类似)来以编程方式执行此操作:

<listener>
    <listener-class>com.sample.SessionTimeoutSetter</listener-class>
</listener>


public class SessionTimeoutSetter implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent event) {
        event.getSession().setMaxInactiveInterval(40);
    }

    public void sessionDestroyed(HttpSessionEvent event) {
        // not needed
    }
}


取自servlet-api-2.4&#39; s HttpSession

/**
 * Specifies the time, in seconds, between client requests before the
 * servlet container will invalidate this session.  A negative time
 * indicates the session should never timeout.
 *
 * @param interval An integer specifying the number of seconds
 */
public void setMaxInactiveInterval(int interval);