Asp.net
在 ASP.NET Web 應用程序之間傳遞會話數據
我正在嘗試幫助一個朋友 - 他們有一個相當大的 Web 應用程序(ASP.NET 4.0,Visual Basic),它有許多子文件夾,它們都充當準子應用程序(但它們只是主應用程序的子文件夾)。該應用程序將被拆分為多個獨立的 Web 應用程序,因為在其目前形式下,很難進一步維護和開發。
問題是目前的單體應用程序使用許多會話變數來儲存使用者資訊(登錄後等)會話)。會話狀態儲存在 SQL Server 中。目前 Web 應用程序的使用者都是外部使用者,並非所有使用者都可以訪問所有“子應用程序”。
我正在尋找關於這兩件事的一些建議:
- 我已經做了一些搜尋,發現單點登錄 - 這似乎解決了跨這些應用程序的身份驗證問題,但我不熟悉它,我不明白如果“會話”如何刪除身份驗證資訊過期,因為不同的 Web 應用程序將有不同的會話。一旦會話在其中一個中過期,是否可以從所有 Web 應用程序中註銷使用者?
2.我懷疑(但不確定)在拆分後可能需要共享的身份驗證資訊之上可能還有一些其他會話數據。最好的方法是什麼(再次可靠和安全)?
我發現這篇關於傳遞 ID的文章(傳遞給將保存共享數據的數據庫記錄)並想知道它是否好。
所有建議將不勝感激。
PS:我在 SO 上找到了許多關於此的主題,但我不相信他們中的任何一個都回答了這些具體問題。我發現最有幫助的是這個:
最終我找到了解決這個問題的方法,我把它留在這裡作為其他人的參考:
StateServer 使用 Windows 服務(ASP.NET 狀態服務)來處理記憶體中的會話。這使用 MachineKey、AppDomainAppID 以及 SessionID 來唯一標識應用程序。
- 在 web.config 中將相同的 MachineKey 設置為站點下的所有應用程序都相同。
- 在 Global.asax Init() 中添加程式碼以將所有應用程序的 AppDomainAppID 設置為相同。
- 實現 ISessionIDManager 並返回自定義 Session ID 以在子應用程序中重複使用。
以下連結為我所做的實際實現提供了資訊: