6

Tomcat 7アプリサーバーでアプリケーションのタイムアウトを設定しようとしています。最初に、web.xmlでタイムアウトを1分としてテストしています。

 <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

アイドル状態を1分以上、場合によっては5分以上続けると、Tomcatがアプリケーションですぐにタイムアウトを起動せず、アプリケーションで何かをクリックしてもセッションが期限切れになりません。それでも別のページに移動できます。ログインページでアイドル状態を維持しているとき、またはログアウトしているときは、セッションが破棄されていることがわかります。しかし、一度ログインが完了し、アプリケーションセッション内にいるときは、タイムアウトは発生していません。そうか

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

私は何が間違っているのですか?そして、で述べた後でも、<session-timeout>コードのどこかにコードweb.xmlが必要ですか?JSFで破棄されたセッションでsession.invalidateリダイレクトするにはどうすればよいですか?login.xhtml

4

1 に答える 1

9

あなたは何も悪いことをしていません。バックグラウンドスレッドは、セッションが期限切れになると、x分ごとにチェックします。これはコンテナ固有です。つまり、指定した時間の後に期限切れになることは保証されません。tomcatでは、server.xmlファイルでこのチェック間隔を簡単に変更できることを知っています。

于 2012-11-07T19:35:21.443 に答える