最近使用者常常反應 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
如果這文章對您有幫助,希望您鼓勵一下我喔 :)
分享
推到 Plurk!
DotBlogs Tags:
ASPNET
Session
Timeout
時間短
消失
遺失