2016-09-19 135 views
8

我有兩個HTTP服務器提供的UI。 因此我需要清除兩個服務器的HTTP會話。 註銷用例很簡單,但我不清楚如何在會話超時用例中執行此操作。會話超時時來自瀏覽器的HTTP請求

服務器端的通知可以通過HttpSessionBindingListener Getting notification when bounded/unbounded to a HTTP session進行。 但是我怎樣才能通知客戶網站呢? 我必須從瀏覽器發送請求到第二個服務器,以便能夠清除第二個服務器上的會話cookie,因此我無法從服務器端發送請求。

新增

一個服務器的Tomcat 8,第二服務器是Apache的HTTPD服務器。我想通過UI回調來解決它(從Tomcat HTTP Servlet服務器)。

+0

是不是更多的服務器配置?我認爲有一種方法可以配置服務器以共享會話。你能在你使用的服務器上包含更多的細節,包括版本嗎? – Kieveli

+0

好問題。我正在等待更多細節。我將這種方法與Spring Session進行了比較(集羣:http://docs.spring.io/spring-session/docs/current/reference/html5/#httpsession-redis),它使用像redis這樣的外部存儲來管理集羣會話。 PS:我希望在這個問題上有一個SO訂閱按鈕。 – code4kix

+0

Kieveli,我不想配置任何會話共享。一臺服務器是Tomcat 8,第二臺服務器是Apache HTTPD服務器。 我想通過UI回調來解決它(從Tomcat HTTP servlet服務器)。 code4kix,在這個問題上訂閱,只需按下星號按鈕 – Michael

回答

4

Apache的HTTPD(Apache)的文檔:

與外部應用程序

https://httpd.apache.org/docs/2.4/mod/mod_session.html#integration

  • 您可以編寫自己的模塊,那麼你可以使用這個模塊來刪除會話集成會話在Tomcat認爲它們是可消耗的之後。
  • 您可以使用Tomcat和Apache外部的會話數據庫(例如在MySQL中),兩臺服務器都會使用它驗證用戶。刪除會話只需要從數據庫中刪除條目。
  • 作爲一個獨立的應用程序:作爲文檔狀態,它是在你做的工作,查找和訪問會話文件,打破它們,並編輯它們。如果Tomcat和Apache位於不同的計算機上,則可以在Apache框中擁有一個帶有偵聽器的代理,並讓Tomcat請求代理刪除會話數據。
  • Apache通常使用PHP,並且還有數據庫。兩者都可以有自己的會話來處理。
+0

我確實想通過數據庫管理會話。在上面的答案中找不到解決方案 – Michael

+1

我不會編寫代碼,但是您可能會希望在apache httpd框(或apache的fork)上運行獨立應用程序。讓它監聽端口(套接字或Java調用)。每當tomcat刪除一個會話時,它都必須調用這個程序,程序必須刪除匹配的apache httpd會話。沒有簡單的框架調用,你必須做的一切。 – gia

+0

我需要通過瀏覽器回調。我可以通過服務器端開發大量的解決方案,但我需要一個瀏覽器解決方案 – Michael

0

有幾種方法可以嘗試。

  1. 正如@Kwebble提到,在Tomcat會話超時撥打電話到您的Apache服務器,並要求其註銷/無效會話。

  2. 如果會話超時在Tomcat中,UI會在發出任何請求時知道它。現在從UI中,撥打Apache服務器來註銷/使會話無效。