2011-11-03 234 views
1

我們有一些用JSP編寫的網頁和一些用PHP編寫的網頁。我們試圖完成的是,無論何時用戶登錄(通過PHP頁面),我們想要保存會話信息(用戶標識,登錄時間等),並在訪問JSP頁面時使用相同的信息作爲好。在php和jsp之間共享會話

我們如何使用相同的會話ID來共享JSP和PHP會話信息?

有沒有辦法做到這一點,或者他們是否自動兼容?

+2

我會建議使用一個通用的數據庫表來存儲會話信息,並且爲每種語言編寫自己的會話處理例程。 – Scuzzy

+0

Thanx Scuzzy。是否有更好的方法來做到這一點?在這種情況下,我們必須在註銷時從數據庫中刪除會話信息。但是如果用戶關閉瀏覽器或關閉他的系統widout註銷會發生什麼?我們在db中留下了多個無用的條目。 – key2

+1

好的,關閉瀏覽器問題的用戶可以使用cookie本身解決,一個空或0過期將在瀏覽器關閉時過期cookie(因此會話id)。從那裏你可以建立你自己的垃圾收集功能來清理一段時間內處於非活動狀態的會話表。在驗證登錄詳細信息之前,處理此問題的最簡單方法是根據上次使用的時間戳清理舊行,但您可能希望在每次會話更新之前執行此操作,以確保已將其連接閒置太久的用戶自動註銷。 – Scuzzy

回答

3

您應該有一個公共的分佈式會話管理,PHP和JSP頁面將用來檢索分區。您還需要擁有JSP和PHP的請求包裝器,它們會覆蓋getSession()並將會話管理委派給您的自定義分佈式會話管理。

我不知道如何在PHP中包裝請求,但對於JSP的,你可以有一個過濾器來創建一個請求包裝器。

常見的分佈式會話管理應該照顧會話管理生命週期的,如:

  1. 如果會話不給定id存在創建會話。
  2. 查找會話如果會話存在與給定的ID。
  3. 用戶註銷時會使會話失效,即當頁面執行會話失效時。
  4. 如果會話在給定超時時間內處於空閒狀態,則會話無效。會話管理線程應按給定時間間隔驗證會話,並使超出超時值的會話無效。