ASP.NET 使用mode=”InProc”方式保存Session老是丟失,無奈改成StateServer 模式。
session是工作在你的應用程序進程中的。asp.net進程、iis往往會在20分鐘之后重啟相關的應用程序,緩沖池滿了(例如100個之后)也會重啟,各種進程保護措施都會隨時重新啟動,因此InProc方式丟失session是很正常的事。csdn上明確告訴了這種模式只能保存“易失的、暫時的 ”變量,這是cache沒有之前的一種解決方案。而長期保持的數據就要保存在外部數據源中。狀態服務器就是一種進程外的數據源。
StateServer 模式的實質是,把Session 存放在一個單獨的進程里,此進程獨立于 aspnet_wp.exe 或 w3wp.exe 。啟用此服務后,在“任務管理器”中可以看到一個名為 aspnet_state.exe 的進程,下面開始說明一下設置的具體步驟:
1、 修改注冊表(關鍵步驟,如下圖)
運行 regedit → 打開注冊表 → 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state \Parameters 節點 → 將 AllowRemoteConnection 的鍵值設置成“1”(1 為允許遠程電腦的連接,0 代表禁止)→ 設置 Port (端口號)
注意事項:
a)、若ASP.NET State Service 正在運行,修改注冊表內容后,則需要重新啟動該服務
b)、注意端口號的鍵值是以十六進制儲存的,可以使用十進制進行修改,42424 是默認的端口
c)、AllowRemoteConnection 的鍵值設置成“1”后,意味著允許遠程電腦的連接,也就是說只要知道你的服務端口,就可享用你的ASP.NET State Service,即把 Session 存放在你的電腦進程內,因此請大家慎用;鍵值為“0”時,僅有stateConnectionString 為“tcpip=localhost: 42424”與“tcpip=127.0.0.1:42424”的情況,方可使用ASP.NET State Service
2、 開啟 ASP.NET State Service
右鍵點擊“我的電腦”→ 管理 → 服務與應用程序 → 服務 → 雙擊“ASP.NET State Service” → 啟動(可設為“自動”)
說明:只要安裝了 .Net Framework ,都擁有此服務。
3、 更改 Web.config
打開 Web.config → 找到 <sessionState> 節點內容
<sessionState
mode=”InProc”
stateConnectionString=”tcpip=127.0.0.1:42424″
sqlConnectionString=”data source=127.0.0.1;Trusted_Connection=yes”
cookieless=”false”
timeout=”20″ />
→ 將其改為以下內容
<sessionState mode=”StateServer” stateConnectionString=”tcpip=192.168.0.2:42424″ timeout=”20″ />
注意事項:
1、timeout=”20″為Session 20分鐘超時
2、IP 地址(可以是遠程計算機 IP、計算機名稱、域名)與端口號,端口號需與ASP.NET State Service 的服務端口一致