2009-04-20 7 views
5

Tomcat에서 J2EE 웹 응용 프로그램을 실행하고 있으며 최근에 응용 프로그램에 메트릭을 추가해야합니다. SessionListener를 사용하여 세션이 삭제 된 시점을 감지하고 메트릭을 데이터베이스에 업로드합니다. 내 세션 타임 아웃은 web.xml에서 30 분으로 설정되어 있으며 프로그래밍 방식으로 세션을 무효화하지는 않습니다. 종종 테스트를 위해 로그인하는 동안 5 ~ 10 분 동안 로그인하는 동안 데이터베이스에 업로드 된 3 ~ 4 세트의 측정 항목이 모두 서로 다른 세션 ID로 표시됩니다.무작위 세션 무효화

web.xml 및 session.invalidate() 외에도 Tomcat에서 세션을 삭제할 수있는 원인은 무엇입니까? 예외? Tomcat이 무작위로 세션을 무효화할 예정입니까?

+0

영구 세션을 사용합니까? – trunkc

+0

영구 세션을 사용하고 있지 않습니다. – jconlin

+0

로깅은 하나의 세션 만 생성해야하며 생성 된 세션은 3 또는 4입니다. 세션이 파괴되거나 생성 될 때만 메트릭을 유지합니까? –

답변

4

아마도 웹 브라우저가 응용 프로그램에서 요청한 웹 응용 프로그램에 대한 요청으로 세션 쿠키를 보내지 않기로 결정했습니다. 나는 이것이 아파치 재 작성 규칙에서 일어나는 것을 보았다. 세션 쿠키 경로 외부의 URL이 웹 응용 프로그램으로 리디렉션되었습니다. folowing 일이 같은 뭔가 (자세한 내용은 잘못 될 수 있음) :

내 웹 응용 프로그램이 응용 프로그램/위치했다
  • /
  • 이 때문에 세션 쿠키가이 경로/응용 프로그램/
  • 페이지에 묶여 웹 어플리케이션은/응용 프로그램/createImage의에 (경로가 일치하지 않습니다)
  • 서버 (내부적으로) 요청을 리디렉션이 이미지의 요청에 세션 쿠키를 전송하지 않았다
  • 브라우저를 /img/magic.jpeg 언급? 마법
  • 웹 응용 프로그램이 세션 쿠키를받지 못하여 새로운 세션을 만들었습니다.

새 세션의 초기 URL을 기록하면 문제가 발생하는지 확인할 수 있습니다.

0

이것은 서버에서 발생한 일은 아니지만 서버에서 시스템 시간이 앞으로 설정된 경우 세션이 "경과 된 시간"30 분보다 빨리 만료 될 수 있습니다. Tomcat은 적어도 5.5 버전부터 세션을 만료시키기 위해 "시계 시간"을 사용했기 때문에 시스템 시간을 변경하면 세션 수명이 단축됩니다.