본문 바로가기

Apache / Tomcat

Tomcat 로컬환경에서 세션이 끊길때(JSessionID 충돌)

반응형

로컬환경으로 Tomcat을 이용하여 개발하다 보면 종종 세션이 끊길때가 있다.
물론 Tomcat 1개에 1개의 서비스만 올려서 사용중이라면 그럴일은 없겠지만, 여러 프로젝트를 여러개의 서비스에 올려서 개발할경우 종종 로그인이 끊어지는 경우가 있다.

여러개의 서비스 일지라도 1개의 서비스만 집중적으로 개발할 경우 그럴일은 없는데, 하루에 여러 프로젝트를 손대다보면 세션 끊김이 발생한다.

예를들어 로컬에서 개발시 A라는 프로젝트를 로그인을 한 후 B라는 프로젝트를 로그인 하면 A 프로젝트에서 로그인 했던
세션이 끊어진다.

해당 문제는 바로 JSessionID가 충돌하여 발생하는 문제라고 볼수 있다.
JSessionID는 브라우저에서 로그인등을 통해 세션이나 쿠키등이 생성될경우 사용자의 고유정보를 갖고있는데, 이를 통해 서버는 클라이언트가 어떤 녀석인지 구분을 하게 된다.

이 JSessionID는 사용자 IP를 가지고 구분하게 되는데 우리가 보통 로컬환경에서 개발을 할때는 서비스에 따라 포트만 달리하여 개발을 하기 때문에 기존 세션이 없어지는 문제가 생기는 것이다.

다행히 톰캣은 서비스에 따라 JSessionID의 이름을 사용자가 지정할수 있다.

server.xml의 context 부분에 sessionCookieName을 지정해 주면 된다.

<Context path="" reloadable="false" privileged="true" docBase="D:/Web/WebContent"
               sessionCookieName="test_JSESSIONID" workDir="" crossContext="true" />



* 사실 도메인단위로 운영되는 실 서비스 환경에서는 sessionCookieName을 지정하지 않아도 된다.