具有多个WebApp的Tomcat实例 - 会话相互干扰

时间:2013-04-16 19:29:37

标签: tomcat jenkins

我正在尝试在单个Tomcat实例上运行多个WebApp。我的目标是在给定端口的根上下文中访问每个端口,例如:

http://server:8081
http://server:8082
...

我在server.xml中为每个人分别提供了“服务”,“连接器”,“引擎”和“主机”条目。一切似乎工作正常,除了我登录到第一个应用程序后,如果我登录到第二个,第一个丢失其会话信息并注销。

如果我编辑server.xml并在原始上下文中运行它们,例如

http://server:8081/jenkins
http://server:8082/jenkins
...
一切似乎都很好。这让我相信会话在它们都在根上下文中时会以某种方式共享,即使它们有单独的连接器等等。我知道我在做什么导致这种情况发生?

我确认这两个实例共享相同的jsessionID,当我使用一个实例登录时,另一个实例丢失其第一个jsessionid并占用第二个实例,实际上失去了它的身份验证。

2 个答案:

答案 0 :(得分:2)

查看sessionCookiePath上下文参数。我自己没有尝试过,但我认为这可能是你正在寻找的技巧。

答案 1 :(得分:0)

Tomcat 7

修改文件$ CATALINA_BASE / conf / context.xml,添加属性 sessionCookieName

<!-- The contents of this file will be loaded for each web application -->
<Context sessionCookieName="JSESSIONID_SERVER_01">
 <!-- Default set of monitored resources -->
 <WatchedResource>WEB-INF/web.xml</WatchedResource>
 <!-- Uncomment this to disable session persistence across Tomcat restarts -->
 <!--
 <Manager pathname="" />
 -->
 <!-- Uncomment this to enable Comet connection tacking (provides events
 on session expiration as well as webapp lifecycle) -->
 <!--
 <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
 -->
</Context>