2012년 9월 13일 목요일

[TechNode] 세션 클러스터링 중 계속 JSESSIONID가 바뀌는 현상


세션 클러스터링 중 계속 JSESSIONID가 바뀌는 현상

- 작성: IBM 이정운 과장

이부분은 두가지 측면에서 접근을 하셔야 합니다.
먼저 서버간 JSESSIONID가 충돌하여 발생할수도 있고,
애플리케이션간 JSESSIONID가 충돌하여 발생할수도 있습니다.

물론 다른 여러가지 이유에서 발생할수도 있지만. WAS엔지니어가 제일먼저 시도해 보아야 할부분은 엔진 셋팅을
바꿔가면서 테스트를 해보고 범위를 줄여나가는게 아닌가 생각됩니다.

첫번째로 서버간 JSESSIONID가 충돌하여 발생하는 경우
대부분 ND환경에서는 잘 일어나지 않고 한 머신에 BASE를 두대 설치했을경우 일어나는 경우가 많습니다.

예를들어
한 BOX에 두개의 BASE 엔진을 설치후 각각 서로 다른 응용어플리케이션을 설치 했을경우
첫번째 BASE엔진에 설치되어있는 어플리케이션의 JSP1화면(로그인상태)에서 두번째 BASE엔진에 설치되어있는 어플리케이션의 JSP2화면을 호출(팝업창으로)하게 되면 JSP1화면에 세션이 사라지면서 로그아웃 되는 현상이 발생하는 경우입니다.

처음 WAS에서 세션를 생성하면 JSESSION ID가 생깁니다.(JSESSION:session id , domain or ip 정보등)
세션이 생성후에는 jsessionid를 통해 세션 object를 찾아서 세션을 유지하게 되는데,
한 BOX에서 두개의 WAS가 실행되면 jsessionid에 충돌이 발생하게 됩니다.

두개의 어플리케이션이 서로 다른 이름에 세션을 사용하더라도 마찬가지로 JSESSIONID가 중복되므로

Application Server > server1 > 세션 관리 화면에서 가운데쯤 “쿠키사용가능”이 링크가 걸려있는데 이부분을
클릭하고 들어가면 쿠키이름이 “JSESSIONID”라고 되어있다.

이부분에 이름을 두 WAS엔진이 틀리게 가져가게끔 바꿔줘야 합니다.
예)WAS1 엔진 = JSESSIONID
   WAS2 엔진 = JSESSIONID2

두번째 애플리케이션간 JSESSIONID가 충돌하여 발생하는 경우
- 어플리케이션 레벨의 세션관리로 이동하여 “세션 관리 대체” 를 체크해 줍니다.
이부분을 체크하면 서버단의 JSESSIONID 를 읽지 않고 어플리케이션 단의 JSESSIONID를 읽게 됩니다.
이후 각각의 어플리케이션 마다 JSESSIONID를 틀리게 주셔야 합니다.

참고로 한서버에 여러 어플리케이션을 사용한다면, 엔터프라이즈 응용프로그램 > 응용프로그램명 > 세션 관리 > 쿠키
에서 쿠키경로를 다른 이름으로 각각 셋팅해 주면 됩니다.

댓글 없음:

댓글 쓰기