2012-01-24 7 views
1

사이드 oc4j에 배포 된 서블릿 애플리케이션이 있습니다.OC4J의 setMaxInactiveInterval이 정확하지 않습니다.

session.setMaxInactiveInterval(1 * 60); 

을하지만 무슨 일이 1 분 이상 소요 (1 분 반에 도달 할 수 있습니다) 세션이 파괴하기 전에를한다는 것입니다 :

나는 1분 사용 후 사용자 세션을 무효화하려합니다.

구현 문제입니까? 아니면 무엇입니까?

답변

1

정확히 1 분 후에 실제로 서버에 HTTP 요청을 보내는 대신 HttpSessionListener#sessionDestoryed()이 호출 될 때까지 대기하여 파괴를 확인하는 것 같습니다.

세션 삭제는 간격으로 실행되는 백그라운드 작업에 의해 관리되는 대부분의 서버에 있으며, 서버 작성/버전, 구성 및로드에 따라 1 분마다 또는 그 이상이 될 수 있습니다. 이 작업은 만료되었는지 여부에 관계없이 열려있는 모든 세션을 확인하고 그에 따라 만료 된 세션을 스윕합니다. 따라서 세션 파기가 일 때 즉시이 클라이언트가 요청을 보내지 않은 한 세션이 만료 된 것과 같은 초에 호출된다는 것은 사실이 아닙니다. 이 백그라운드 작업은 매 초마다 실행되지 않으며 너무 CPU 집약적이었습니다.

그러나 세션이 서버의 메모리에 남아 있지만 만료 된 동안에는 서버가 세션 ID가있는 요청을 검색 할 때마다 세션 파괴가 즉시 호출됩니다.

그렇다면이를 수락하거나 테스트 방법을 변경해야합니다.

관련 문제