0

tomcat 7、サーブレット3.0、春のソーシャルで春のmvc3を使用して、クラスでセッションをリッスンします。

public class AClass implements ApplicationContextAware, HttpSessionListener{

...
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.applicationContext = applicationContext;
            if (applicationContext instanceof WebApplicationContext) {
                ((WebApplicationContext) applicationContext).getServletContext().addListener(this);
    }

    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("session created");
    }

    public void sessionDestroyed(HttpSessionEvent se){
        System.out.println("session destroyed");

    }
...
}

そして、web.xmlでsession-timeoutを1分に設定しました(正しく機能していると確信しています)。ページを開くと、「sessioncreated」メッセージが表示されますが「sessiondestroyed」は表示されません。1分後にページを更新すると、セッションが期限切れになっていることを示す「セッションが作成されました」というメッセージが再度表示されます。

だから問題は私が間違っているのは何ですか?sessionDestroyedメソッドは、セッションが期限切れになったときに通知するべきではありませんか?

4

1 に答える 1

0

はい、セッションがタイムアウトした場合、または次のプログラムを使用して期限切れになった場合、セッションは破棄されます。

HttpSession.invalidate()

このブログを参照して、すべてが正しく行われていることを確認してください。

また、サーブレットコンテナは、タイムアウト値が正確に経過した後、すぐにセッションを破棄しません。5 ~ 15 分などの特定の時間間隔で実行されるバックグラウンド ジョブがあります。したがって、この理由により、コンソールに破棄された行がすぐに表示されない可能性があります。

于 2013-01-17T21:23:00.757 に答える