시스템 구성은 다음과 같다.
아파치 – 톰켓 ___ test.co.kr 홈페이지
|__ biz.test.co.kr 홈페이지
하나의 톰켓 instance 위에 서비스 되었던 test.co.kr에 추가로 biz.test.co.kr 서비스를 탑재하였다.
헌데 이상한 현상이 발생하였다.
biz.test.co.kr 홈페이지 접속하여 로그인 한 후 test.co.kr로 접속하면 세션 공유 현상이 발생하지 않았는데
다음과 같은 방법으로 테스트를 해보면 세션 공유 현상이 발생했다.
- test.co.kr 접속
- biz.test.co.kr 접속 후 로그인
- 다시 test.co.kr 접속하면 로그인이 되어 있는 현상
위에서 정의된 메인 도메인과 서브 도메인은 서로 다른 서비스를 위해서 구축된 것이기 때문에 세션 공유가 발생하면 안 된다.
원인을 파악해 보니 다음과 같았다.
- test.co.kr 접속하면 Response header에 jsessionId 쿠키 값을 톰켓에서 발급
- biz.test.co.kr 접속하면 위에서 발급 받은 jsessionId 쿠키 값을 Request header에 담아 톰켓 서버로 전송
- biz.test.co.kr 에서 로그인을 하면 해당 jsessionId 값이 tomcat의 세션 객체에 저장
- test.co.kr로 다시 접속하면 Request header에 기존 발급 받은 jsessionId 쿠키 값을 전송
- Request header에 있는 jsessionId 값이 톰켓의 세션 객체에 존재하기 때문에 화면 상에서는 로그인이 되어 있는 것으로 보임
결국 test.co.kr 로 사용자가 접근을 하게 되면 www.test.co.kr로 redirect해주도록 apache virtualhost 설정을 추가하여 해결하였다.
결론 : 메인 도메인과 서브 도메인은 서로 쿠기를 공유한다.