2011-07-25 21 views
1

我目前正在對一個網站進行國際化,並在jsessionID附近遇到了一些問題。我使用Apache web服務器,通過mod_jk在多個JBoss應用程序服務器之間進行負載平衡。在URL修改時重置JSessionID

當我在默認GB URL上點擊該網站時,專用jboss應用服務器上正確創建了jsessionID。例如www.mysite.com創建會話GB_Jboss

當我更新URL爲www.mysite.com/fr時,我想在FR_JBoss上創建一個新的jsessionID。

當我更新URL爲www.mysite.com/us時,我想要在US_JBoss上創建一個新的jsessionID。

但是,每次更新URL時,它總是顯示原始jsessionID。

我希望這有道理嗎?任何想法,我可以如何通過Apache工作?或者,在負載均衡器中這是一個負載均衡問題?

回答

0

很想知道爲什麼要爲不同的URI創建新會話。無論如何,一些選擇,我能想到的:

  1. 添加在您生成會話的cookie的URI的條目。例如,如果yoursite/fr已獲得會話,請將其添加到客戶端Cookie。在每個請求中,您都可以使用過濾器來檢查URI是否與cookie中指定的URI不同。如果是,則使該會話無效,併爲用戶創建新的會話。
  2. 在具有站點URI和會話ID映射的服務器端維護一個singleton HashMap。如果站點URI與每個請求上的會話ID不匹配 - 無效會話。這種方法的缺點是需要在羣集中的所有節點上覆制HashMap,以便在故障轉移到另一臺服務器後正常工作。
+0

我需要一個新的會話的原因是因爲該網站有一個購物籃。每次用戶切換URI時,都需要一個新的會話。 您的建議聽起來好像我需要更改代碼。在Apache級別有什麼可以做的嗎? – MPatel

+0

我不知道如何在Apache上做到這一點。由於您提到您處於網站國際化過程中,因此我提出了涉及代碼更改的解決方案。無論如何,想知道用戶是否會經常在URI之間切換 - 如果他們執行您選擇的任何實現,請確保所有孤立會話立即失效。您不希望它們堆積得很快以消耗更多內存,並減慢羣集節點之間的數據複製速度。 – helios