2012-10-08 3 views
0

동일한 웹 응용 프로그램의 여러 인스턴스가 서로 다른 서버에서 실행되고 있습니다 (모두 공용 IP를 사용합니다). 나는 현재 로그인 한 사용자의 정보를 저장하기 위해 세션을 이용한다.Tomcat HttpSession 쿠키 공유

HttpSession session = req.getSession(true);  

User user = (User)session.getAttribute("user"); 
if (user == null) { 
    // get my user 
    session.setMaxInactiveInterval(....); 
    session.setAttribute("user", user); 
} 

문제는 그 하나 개의 인스턴스에 로그인 할 때 (예를 하나 호출) 다음 내가 예 1로 전환 할 때 그때는 예 2의 쿠키를 집어 들고 다른 (예 2)에 로그인 할 것입니다 이 ID가 인스턴스 1에 존재하지 않고 그 ID와 일치하는 사용자를 조용히 찾을 때 문제가 분명하게 발생합니다.

쿠키를 보았을 때 쿠키는 하나 뿐이므로 JSESSIONID 쿠키 만 보았습니다 도메인 "localhost"로 만들어지며 모든 인스턴스와 공유됩니다. Tomcat이 도메인을 머신의 도메인으로 설정하도록 설정할 수 있습니까?

저는 톰캣 6.0.35를 실행 중입니다.

도움이 되셨습니까? 고맙습니다!

답변

2

defaultHost을 서버의 hostname (또는 네트워크 이름)으로 변경할 수 있습니다.
톰캣의 conf/server.xml 구성 파일에서보세요 : 당신은 또한해야합니다 그리고

<Engine ... defaultHost="myserver"> 

은 변경 :

<Host ... name="myserver"> 

참조 :
http://tomcat.apache.org/tomcat-6.0-doc/config/engine.html
http://tomcat.apache.org/tomcat-6.0-doc/config/host.html

을 또 다른 가능한 해결책으로 각 인스턴스에 대해 "고유 이름"으로 jvmRoute을 정의 할 수 있습니다.

<Engine ... jvmRoute="instance1"> 

이 생성됩니다 JSESSIONID 같은 :

C85262796BE5F656BD8EF58A96F03C96.instance1 
+0

대단히 감사합니다! – user979051

+0

여러분을 환영합니다! – Nic