메인 도메인과 서브 도메인 세션 공유 문제

시스템 구성은 다음과 같다.

아파치 – 톰켓 ___ test.co.kr 홈페이지

                    |__ biz.test.co.kr 홈페이지


하나의 톰켓 instance 위에 서비스 되었던 test.co.kr에 추가로 biz.test.co.kr 서비스를 탑재하였다.

헌데 이상한 현상이 발생하였다.

biz.test.co.kr 홈페이지 접속하여 로그인 한 후 test.co.kr로 접속하면 세션 공유 현상이 발생하지 않았는데

다음과 같은 방법으로 테스트를 해보면 세션 공유 현상이 발생했다.

  1. test.co.kr 접속
  2. biz.test.co.kr 접속 후 로그인
  3. 다시 test.co.kr 접속하면 로그인이 되어 있는 현상

위에서 정의된 메인 도메인과 서브 도메인은 서로 다른 서비스를 위해서 구축된 것이기 때문에 세션 공유가 발생하면 안 된다.

원인을 파악해 보니 다음과 같았다.

  1. test.co.kr 접속하면 Response header에 jsessionId 쿠키 값을 톰켓에서 발급
  2. biz.test.co.kr 접속하면 위에서 발급 받은 jsessionId 쿠키 값을 Request header에 담아 톰켓 서버로 전송
  3. biz.test.co.kr 에서 로그인을 하면 해당 jsessionId 값이 tomcat의 세션 객체에 저장
  4. test.co.kr로 다시 접속하면 Request header에 기존 발급 받은 jsessionId 쿠키 값을 전송
  5. Request header에 있는 jsessionId 값이 톰켓의 세션 객체에 존재하기 때문에 화면 상에서는 로그인이 되어 있는 것으로 보임

결국 test.co.kr 로 사용자가 접근을 하게 되면 www.test.co.kr로 redirect해주도록 apache virtualhost 설정을 추가하여 해결하였다.

결론 : 메인 도메인과 서브 도메인은 서로 쿠기를 공유한다.