2011/5/2 14:33 | 閱讀數 : 7381 我要推薦 | One Comment | 文章分類 : ASP.NET (C#) ASP.NET (VB) 訂閱

最近使用者常常反應 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 時間短 消失 遺失

回應

  1. # re: [ASP.NET] Session 遺失 / Session Timeout / Session 設定 點部落-管理團隊
    2011/5/2 下午 05:03

    to joysdw12:

    感謝您的分享,建議您可以使用 LiveWirer 來進行文章編輯與圖片上傳,會對您圖片的處理會比較輕鬆。
    詳細 LiveWriter 操作說明參考連結
    http://www.dotblogs.com.tw/dotblogs/archive/2008/01/24/1004.aspx

登入後使用進階評論
Please add 5 and 7 and type the answer here: