[ASP.NET] Session 遺失 / Session Timeout / Session 設定

摘要:[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




以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)