2012-10-08 51 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