2012-10-08 48 views
0

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

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和饼干显然当用户在实例1中不存在这样的ID时甚至更糟,当它静静地发现用户与该ID相匹配时,显然产生问题。

我已经看过了这个cookie,只有一个JSESSIONID cookie是由“localhost”域创建的,并与所有实例共享。有没有办法设置Tomcat将域设置为机器域?

我正在运行Tomcat 6.0.35

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

回答

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 
+0

非常感谢您! – user979051

+0

不客气! – Nic