2012/12/18 19:46

JSESSIONID 충돌. Server/WAS



흠, 오랜만에 글을 남기는구만.;;

오늘 프로젝트 지원중, 대박건 발생!

A사이트에서 B사이트를 링크시키는 중,
B사이트에서 만든 세션이 B사이트 내에서 공유가 되지 않는 문제 발생.

즉,
A사이트 -> B사이트( loginchk -> serviceA ) 가 된다고 했을때,
A사이트에서 넘긴 파라미터는 정상적으로 B사이트로 들어와서,
loginchk jsp에서 session을 만들어 serviceA로 넘겼으나,
serviceA에서 해당 세션을 찾지 못하는 문제가 발생했다.

근데, 이게 A사이트가 localhost면 정상적인데,
라이브에 올려서 테스트 하면 문제가 된다;;

이 B사이트가 servlet 2.2 에다가 jdk 1.3 / tomcat 3.2 버전이다보니..;;
그쪽 문제인가.. 싶었다가.. 
A사이트는 weblogic, B사이트는 tomcat 이다보니 생기는 문제인가 싶었다가..;;
머,, 암튼,, 한참 고민하다가..

사수2와 이야기를 하다보니, 
알게되었다..

위에 내용중에 답이 있다.
즉, 
A사이트에서 B사이트로 링크되는 시점에,
A사이트의 JSESSIONID가 넘어갔다.
(왜? 쿠키공유 때문..)
이후, B사이트에서 JSESSIONID를 생성하니, 
똑같은 아이디에 session ID가 두개 생겨버린 것이다.

다시 풀자면,
JSESSIONID는 쿠키에 저장되는 것인데,
A사이트와 B사이트의 도메인 명이 동일하였고,
A사이트에서 weblogic.xml내 설정파일에 
--------------------
<weblogic-version>10.3.5.0</weblogic-version>
<session-descriptor>
<cookie-name>JSESSIONID</cookie-name>
<cookie-domain>.damain.com</cookie-domain> 
<persistent-store-type>replicated_if_clustered</persistent-store-type>
</session-descriptor>
--------------------
위와 같이 JSESSIONID로 쿠키명이 정해져 버려서, 
불가피하게 B사이트에서 만들어지는 tomcat의 sessionID 명과 동일해져 버린 것이다.

이에 대한 해결책은 아래와 같다. (A사이트 기준으로 변경한다 할때..)

1. 위의 cookie-domain 값을 변경해준다.
cookie의 범위가 너무 넓다. 해당 사이트로 축소시켜 준다면, 쿠키가 공유되는 일이 없을 것이다.
물론, 업무에 맞도록 커스터마이징이 필요하겠지만.. 

2. cookie-name을 변경해준다.
cookie가 공유되더라도, ID값이 unique해진다면 문제가 없다.

아, 추가적으로 apache가 연동되어 있다면,
httpd.conf 파일 내에, 
<IfModule mod_weblogic.c> 부분에..
WLCookieName 변경된 sessionID 
이런식으로 추가해 주어야 한다. (http://seongsland.tistory.com/212, 감사!!)
만약 아파치와 웹로직의 sessionid를 일치시켜주지 않으면
아파치에서 웹로직 연결시 클러스터 내의 특정 인스턴스로만 
접속되지 않고 접속이 올때마다 다른 인스턴스로 넘어가게 되어
세션이 온전히 유지되지 않는 문제가 생긴다.. 
실제로 이 설정을 빼먹어 차후에 문제가 되서 아파치 설정을 추가하게 되었다;; 


흠,
솔직히, 이일로 삽질을 너무많이 해서, 
이 추운 겨울날, 오후에 땀을 얼마나 삐질댔었는지 모른다;;

역시, 노익장이라고 했던가,, 경험은 무시 못하는 듯.. 
차장님과 정리하며 이야기를 하다보니, 딱, 원인을 찾을 수 있었다.
어떻게 보면 정말 가까운 자리에 정답이 있었는데.. 
JSESIONID가 쿠키에 저장된다는 걸, 너무 늦게 생각해낸 듯 하다..

암튼, 
오늘 이 사이트 오픈이었는데;;
나때문에 욕도 먹고 해서 엄청 미안하기도 하고 그렇지만.
또 이렇게 하나 배워가면서 해결되니, 너무 뿌듯하고 좋구만.,ㅋㅋ

아,, 멀고도 멀구나.. 이길~~~~ -_-b

덧글

  • 하트웰 2017/02/03 15:34 # 삭제 답글

    덕분에 해결했습니다.
    한쪽은 ip로 접속 한쪽은 도메인네임으로 하니 현상해결 됐네요..

    감사합니다.
댓글 입력 영역