2010-09-14 62 views
2

所有。 我發現這個有趣的線程有關如何使用戶會話失效,當他登錄兩次。Java如何在用相同憑證登錄兩次時使用戶會話無效

How to invalidate an user session when he logs twice with the same credentials

我有一個稍微不同的環境,但我應該可以解決同樣的問題。 不同之處在於我不使用JSF,而且我的應用程序正在羣集上運行。

我願意應用這種模式,但我想知道我應該在哪裏保存用戶映射? 羣集中的所有計算機是否都有可見的上下文?

在此先感謝

回答

2

有關在羣集上運行的應用程序的點比沒有JSF的更重要和相關。

集羣對任何解決方案施加的要求是解決方案需要使用集羣所有成員都可訪問的共享存儲。有是佔了這個要求的幾種可能的解決方案:

  • 使用數據庫來存儲當前登錄用戶的所有列表(用ID來識別他們的會話; JSESSIONID可以使用,但最好是使用保證在羣集中的所有成員上都是唯一的ID)。即使是用戶ID和集羣成員ID的組合也可以。這是最簡單的,但它需要你測試你的代碼如何處理故障轉移(你可能必須在會話故障轉移時更新數據庫中的條目)。
  • 使用應用程序上下文(ServletContext)。這是一個可能的解決方案,但根本不推薦。雖然應用程序上下文必須在所有羣集成員中保持最新,但需要花費更新內容(羣集成員之間的網絡流量增加)。
  • 使用像Terracotta或Coherence這樣的分佈式緩存解決方案。這個解決方案與前一個解決方案几乎相同,除了會話「map」不會在ServletContext中進行管理。更新分佈式緩存時,網絡通信勢必發生。
相關問題