2011-03-22 2 views
3

Struts 프로젝트에서 사용자 세션 무효화/시간 초과를 감지하도록되어있는 javax.servlet.http.HttpSessionListener 구현이 있습니다.HttpSessionListener가 세션 시간 초과를 감지하지 못했습니다.

sessionDestroyed()가 호출 된 적이없는 것 같습니다. JSESSIONID를 삭제하고 페이지를 새로 고침하여이를 재현 할 수 있습니다. 또한 세션 시간이 초과 될 때까지 브라우저를 열어 두는 것도 동일한 효과가 있음을 발견했습니다.

사이트가 Java 1.5와 함께 JBoss 4.2.3.GA에서 실행 중입니다.

HttpSessionListener가 예상 한대로 작동하지 않는다고 생각하기 시작했습니다. 뭔가 빠졌습니까?

편집 : 다음과 같이

내 리스너가 내 web.xml 파일에 등록 : 웹 컨테이너가 세션을 만료 될 때까지

<listener> 
    <listener-class>com.domain.web.listener.LogoutListener</listener-class> 
</listener> 
+0

web.xml에 리스너를 구성 했습니까? –

+0

@Suresh 네, 리스너가 web.xml에 구성되어 있습니다. – seanhodges

+0

Tomcat 및 Java 1.7에서 동일한 문제가 발생했습니다. 브라우저를 연 세션 시간 초과 후 'sessionDestroyed'가 항상 호출되는 것은 아닙니다. – Andremoniy

답변

5

sessionDestroyed() 메소드가 호출되지 않습니다. 서버가 JSESSIONID 쿠키를 삭제했다는 것을 알지 못한다면 브라우저가 다른 새로운 세션처럼 보입니다.

내가 Tomcat에서 본 것은 웹 컨테이너 구현마다 다르기 때문에 세션 만료는 매 분마다 발생합니다. 따라서 세션 시간이 지난 후에도 만료가 감지 될 때까지 지연이 발생할 수 있습니다.

확실히 결국 결국 발생합니다. 특히 제한 시간을 1 분으로 설정하고 몇 분 정도 기다린 경우 시간 제한은 분 단위로 지정되므로 테스트하는 데 최소 1 분이 소요됩니다. 청취자가 web.xml 파일에 등록되어 있다고 가정합니까?

+0

그건 의미가 있습니다. JBoss에서 세션 시간 초과를 조정하여 제가 충분히 오래 기다리지 않았는지 확인해 보겠습니다. – seanhodges

-2

애플리케이션의 WEB-INF에서 web.xml에 리스너를 등록해야합니다. 청취자 클래스 이름