摘要:[ASP.NET] Session 遺失 / Session Timeout / Session 設定
前言
最近使用者常常反應 Session 會莫名其妙的 Timeout,記得已經設定 Timeout 時間為 60 分鐘了怎麼還會這麼容易遺失,查了一下發現針對 Session 有以下模式設定:
- InProc : 預設值,此模式會將工作階段狀態存放在 Web伺服器的記憶體中。
- StateServer : 此模式會將工作階段狀態儲存在稱為 ASP.NET 狀態服務的個別處理序中。這樣可以確保工作階段狀態在 Web應用程式重新啟動時保留下來,並且讓 Web伺服陣列中的多個 Web伺服器都能夠使用工作階段狀態。
- SQLServer : 此模式會將工作階段狀態儲存在 SQL Server資料庫中。這樣可以確保工作階段狀態在 Web應用程式重新啟動時保留下來,並且讓 Web伺服陣列中的多個 Web伺服器都能夠使用工作階段狀態。
- Custom : 此模式可讓您指定自訂儲存提供者 (Provider)。
- Off : 此模式會停用工作階段狀態。
之前預設是 InProc,所以在 Server 上更新程式或執行某些動作時會導致 Session 遺失,所以現在改用 StateServer 模式。
範例
首先在 Web.Config 設定裡加入 SessionState 的設定字串:
加完這個字串時候如果馬上去執行網站,會出現以下錯誤:
無法將工作階段狀態要求送至工作階段狀態伺服器。請確定 ASP.NET 狀態服務已經啟動且用戶端與伺服器的通訊埠都相同。如果伺服器是在遠端電腦上,請檢查 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection 的值,確定它是否接受遠端要求。如果伺服器是在本機電腦上,而且前述登錄值不存在或設定為 0,狀態伺服器連接字串就必須使用 'localhost' 或 '127.0.0.1' 做為伺服器名稱。
原因是因為尚未修改系統機碼與啟動 ASP.NET State Service 服務,接下來先修改機碼:
開始 > 執行 > 輸入 regedit > 開啟登入編輯程式 在路徑 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\ 下找到 AllowRemoteConnection 將數值資料更改為 1
再來開啟 ASP.NET State Service 服務,服務 > ASP.NET State Service > 啟動。
都設定完成後,再去執行網站即可。
參考資料
http://blog.xuite.net/sugopili/computerblog/20910396
以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)