2009-05-18 142 views
46

我有一個需要在單個物理盒子中運行多個tomcat服務器。從瀏覽器訪問這些應用程序時,當用戶在應用程序之間切換時,會導致用戶先前訪問應用程序。這是因爲JSESSIONID Cookie衝突。更改cookie JSESSIONID名稱

一個可能的解決方案是在不同的上下文中運行每個應用程序。不幸的是,我的應用程序不能在上下文路徑設置中工作,因爲沒有任何資源通過前面提到的request.getContextPath()來訪問。

這讓我改變了cookie JSESSIONID的名稱來解決衝突。有沒有辦法做到這一點?如果是,如何?

希望我清楚地說出我的問題。

注意:我的所有應用程序都運行在同一臺計算機的不同端口中。

+3

你如何管理在同一端口上同時運行「多個tomcat服務器」? – 2009-05-18 10:28:11

+2

@HarryLime:可以使用代理服務器。 – Thilo 2014-05-13 00:03:43

回答

4

我不認爲這是有可能在這一點上 - 看到https://issues.apache.org/bugzilla/show_bug.cgi?id=42419

中的最後一項指出,「這已被固定在5.5.X和將被列入5.5.28開始」 - 這是下一個點發布 - 5.5.27是當前版本。

+0

感謝您挖掘出來。看起來像只剩下的選項是修改現有的tomcat源碼。 錯誤/功能報告清楚地說明了我的確切需求和解決方案。 感謝您的回答。 – ramanr 2009-05-18 12:58:26

2

不是100%確定這是否可行,但可以使用jvmRoute屬性,該屬性通常用於負載均衡/集羣環境中,以便負載均衡器能夠區分節點。示例:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1"> 

這將最終生成一個類似於「ABCDEF123456.node1」的JSESSIONID值。

Documentation link

+0

這關於cookie的價值,而不是它的名字,對嗎? – 2015-04-13 10:01:52

13

通過使用以下兩個系統屬性,可以輕鬆實現此操作。

  • org.apache.catalina.SESSION_COOKIE_NAME
  • org.apache.catalina.SESSION_PARAMETER_NAME

的任何值可以被傳遞給上述性能改變的默認值。

Here complete details找到一些示例腳本。

+1

這對Tomcat7 +不起作用。現在你可以在Context配置中設置它,參見@ timkingman的答案。 – Thilo 2014-05-13 01:22:33

12

下對我的作品上Tomcat7在context.xml文件:

<Context path="/yourApp" sessionCookieName="custom_session_id"> 
45

一切皆與Servlet API的3.0更加簡單。

現在你可以在你的web.xml配置它:

<session-config> 
    <cookie-config> 
     <name>MY_JSESSIONID_YAHOOOOOO</name> 
    </cookie-config> 
</session-config> 

這就是它!