0

我有几个在不同服务器上运行的相同 Web 应用程序的单独实例(都有不同的面向公众的 IP)。我利用会话来存储当前登录的用户信息。

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)时,当我切换到实例 1 时,它会获取实例 2 的 cookie,并且当用户在实例 1 上不存在这样的 id,甚至更糟糕的是,它只是默默地找到与该 id 匹配的用户..

我查看了 cookie,只有一个JSESSIONID使用“localhost”域创建的 cookie,它与所有实例共享。有没有办法设置Tomcat将域设置为机器的域?

我正在运行 Tomcat 6.0.35

任何帮助,将不胜感激。谢谢!

4

1 回答 1

2

您可以更改defaultHosthostname服务器的(或网络名称)。
看一下Tomcat的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
于 2012-10-09T01:29:54.017 回答