[Tomcat] JSESSIONID 에 대한 !!!
http://lng1982.tistory.com/143
세션 충돌..
내용은 대충 이렇다...
특정 서버에서
우리쪽 L4아이피로 URL을 걸어 접속을 하는데..
A,B서버 어느 곳으로 붙을지 모르는상황...
A로 붙어서 로그인이 되면 서블릿 컨테이너 톰캣이 내부적으로 확인 할 수 있는 JSESSIONID라는 쿠키를
Client에 값을 남긴다.
- Response 쪽에 Header정보를 까보면 set-cookie: JSESSIONID=123156ASF564 대충 뭐 이런식의 값이 남는다
그후 사이트를 돌아다니면
set-cookie가 아닌 cookie값으로 읽은게 확인되는데 이게 tomcat에서 인식을 하여 로그인을 한 사람으로 간주한다.
근데 왜 쿠키로 남기느냐!?
Http 프로토콜은 stateless의 특징.. 요청-응답-끝(연결 끊김) 이 되기 떄문에 그렇기 때문에 서버에서는 사용자의 로그인 인증 여부를 확인 할 수 있도록 남기는 것이다.
여기서 로그인 재요청을 하면 client브라우저에 있는 JSESSIONID쿠키 값을 request의 header에 담아 서버로 전송!
톰캣은 확인 후 response로 JSESSIONID를 다시 내리지 않는다.
그리고 쿠키는 포트를 구분하지 않기 때문에 포트를 분리 하여도 동일 서비스로 인식한다.!
왜냐, 로컬에 저장되있는 쿠키를 보내기 때문에!!
Tomcat 5.5 인 경우
- catalina.bat 또는 JAVA_OPTS에 추가한다.
-Dorg.apache.catalina.SESSION_COOKIE_NAME=JSESSIONID
참조: http://tomcat.apache.org/tomcat-5.5-doc/config/systemprops.html
<Tomcat 7.x 의 경우>
Tomcat 7 에서는 위의 속성이 deprecated되었다고 한다.
대신 global context.xml 파일 (CATALINA_BASE/conf/context.xml) 에
다음과 같이 sessionCookieName 속성을 등록해야 한다고..
<Context sessionCookieName="JSESSIONID">
(위 하나로 통일)
참조: http://tomcat.apache.org/tomcat-7.0-doc/config/context.html
<Tomcat 6.x 의 경우>
위의 둘 다 가능한데, 다만 system property가 우선한다고 한다.
[출처] 세션 키 변경 - Tomcat, Redmine|작성자 우가가
오늘 하나 배웠다!!
'Java > JSP' 카테고리의 다른 글
[Tomcat] L4 로드벨런싱이 되어 Session 공유 (0) | 2013.12.05 |
---|