我有几个在不同服务器上运行的同一个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,只使用“localhost”域创建了一个JSESSIONID
cookie,并与所有实例共享。有没有办法设置Tomcat将域设置为机器的域?
我正在运行Tomcat 6.0.35
任何帮助将不胜感激。谢谢!
答案 0 :(得分:2)
您可以将defaultHost
更改为服务器的hostname
(或网络名称)
看看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