6

我正在尝试在 Tomcat 7 应用程序服务器上设置我的应用程序超时。首先我在 web.xml 中将超时时间设置为一分钟

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

我正在使用HttpSessionListener来确保我的超时工作正常。我在 web.xml 中声明了我的 sessionListener 类。

public class HttpSessionChecker implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent event) {
        System.out.printf("Session ID %s created at %s%n", event.getSession().getId(), new Date());
    }
    public void sessionDestroyed(HttpSessionEvent event) {
        System.out.printf("Session ID %s destroyed at %s%n", event.getSession().getId(), new Date());
    }
}

在 web.xml 中

<listener>
    <listener-class>com.test.util.HttpSessionChecker</listener-class>
</listener>

但是当启动我的服务器并启动我的应用程序时,我看到会话仅在登录页面上启动。

Session ID 934073ED5E9933158995EE5EB680D3F7 created at Wed Nov 07 09:39:13 PST 2012

当我保持空闲超过一分钟或超过五分钟时,Tomcat 不会立即在我的应用程序中触发 Timeout 并单击我的应用程序中的某些内容 Session is not Expired.Still 我能够导航另一个页面。但是当我在登录页面上处于空闲状态或注销时,我看到会话被破坏。但是,一旦登录完成,当我在应用程序会话中时,超时就不会发生。我懂了

Session ID 934073ED5E9933158995EE5EB680D3F7 destroyed at Wed Nov 07 09:42:13 PST 2012

我究竟做错了什么?<session-timeout>甚至在我提到web.xml我是否需要代码session.invalidate中的某个地方的代码?如何重定向到login.xhtml在 JSF 中销毁的会话中?

4

1 回答 1

9

你没有做错什么。当会话过期时,后台线程将每 x 分钟检查一次。这是特定于容器的。即不保证在您指定的时间后过期。我知道在 tomcat 中,您可以轻松地在 server.xml 文件中修改此检查间隔。

于 2012-11-07T19:35:21.443 回答