2016-07-01 12 views
0

HttpSessionListenerクラスをweb.xmlに登録し、アプリケーション起動時にsessionCreated()メソッドが2回呼び出されています。アプリケーションからログアウトすると、sessionDestroyed()が呼び出されてから、もう一度sessionCreated()が呼び出しています。それはなぜそうですか?Spring MVCアプリケーションの起動時にHttpSessionListener.sessionCreated()が2回呼び出される

public class SessionManager implements HttpSessionListener { 

    @Override 
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {  
      System.out.println("Session Creation called!!..");  
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { 
      System.out.println("Session Destruction called!!.."); 
    } 
} 

出力:

アプリケーションが起動され、それが印刷さ "セッション作成と呼ばれる!! .." 2回。私がログアウトすると、最初に「Session Destruction called !!」と2番目に「Session Creation called !!」と表示されます。

+0

新しいセッションが生成されると、 'sessionCreated()'メソッドが呼び出されると思います。だからあなたがログアウトすると 'session.invalidate()'が呼び出され、その後、annonymounsというユーザのために新しいセッションが作成されます。 – zombie

+0

こういうことはありません。私が間違っているところで助けてくれますか? – Tijom

答えて

0

アプリケーションに正常にログインすると、新しい認証済みセッションを作成する前に、古い匿名セッションが破棄されます。同様のことは、ログアウト時にも起こります。認証されたセッションが最初に破棄され、新しい匿名が作成されます。これは、記述したシナリオと一致しています。

どのセッションが作成および破棄されているかを確認するには、セッションIDも含めてログを改善してください。例:

public class SessionManager implements HttpSessionListener { 

    public void sessionCreated(HttpSessionEvent httpSessionEvent) { 
     System.out.println("session created: " + httpSessionEvent.getSession().getId()); 
    } 

    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { 
     System.out.println("session destroyed: " + httpSessionEvent.getSession().getId()); 
    } 

} 
関連する問題