2016-07-01 5 views
0

구현 된 클래스 HttpSessionListenerweb.xml에 등록되었으며 응용 프로그램이 시작될 때 sessionCreated() 메서드가 두 번 호출되는 중입니다. 응용 프로그램에서 로그 아웃 할 때 sessionDestroyed()이 전화를 걸고 다시 시도한 후 sessionCreated()이 전화를 겁니다. 왜 그런가?Spring MVC 응용 프로그램이 시작될 때 HttpSessionListener.sessionCreated()가 두 번 호출 됨

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!!.."); 
    } 
} 

출력 :

응용 프로그램을 시작, 그것은 인쇄 "세션 창조라고! ..."두 번. 로그 아웃 할 때, 처음에는 "Session Destruction called !!"이 인쇄되고 두 번째는 "Session Creation called ... !!"으로 인쇄됩니다.

+0

새 세션 생성시'sessionCreated()'메소드가 호출됩니다. 그래서 당신이 로그 아웃 할 때'session.invalidate()'가 호출되고 나면 announouns user를 위해 새로운 세션이 생성됩니다. – 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()); 
    } 

}