但在有負載平行架構下,倘若沒有將 Session 取出並進行管理,會發生無法取得 Session 的情況下,網站運作即可能發生問題。常見的 SessionState (工作階段狀態) 有:
1. 狀態伺服器:透過 ASP.NET State Service 來儲存 Session ,啟動時需要確認此服務有啟動
2. SQL Server:透過 SQL Server 來儲存 Session,理所當然,你需要一台 SQL Server
3. 自訂:常見是透過 Redis 來作為 Session 儲存狀態,你需要透過套件與一台 Redis Server
這些方式各有優、缺點,有些效能就好;有些則可以儲存大量 Session;有些則需要額外服務才能使用。如何使用則依據您的需求而定。本篇文章將簡單介紹在 在 IIS 上如何使用 SQL Server 保存工作階段,若有任何錯誤或建議,請各為前輩不吝提出,謝謝。
整個過程分成兩個階段:
透過 aspnet_regsql.exe 建立 SessionState 所需要資料庫
aspnet_regsql.exe 位於 C:\Windows\Microsoft.NET\Framework\[版本號碼]\aspnet_regsql.exe (無論用 2.x 版或 4.x 板皆可)。
你可以開啟命令提示字元 (command line),直接輸入下列指令切換目錄
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319\
接下來,你可以輸入下列指令,來查詢如何使用
aspnet_regsql.exe -?
大致上需要注意的參數是
-S: 伺服器名稱 (位址)
-U: SQL Server 登入帳號
-P: SQL Server 登入密碼
-E: 使用目前 windows 登入者資訊登入 (適用於有開啟 Windows 驗證的 SQL Server)
-ssadd: 在 SQL Server 加入新的 Session 支援
-ssremove: 在SQL Server 移除 Session 支援
-sstype: t 表示暫存,將資料存於 SQL Server 內 tempdb;p 永久保存,會建立一個資料庫 ASPState 資料庫儲存資料;c 表示自訂資料庫進行儲存
-d: 當你的sstype 參數給 c 時,你可以透過 -d 自訂資料庫名稱
下面舉幾個指令範例:
1. 透過目前 Windows 登入資訊,在本機 SQL Server 建立 ASPState 資料庫儲存 Session State 資料庫
aspnet_regsql.exe –S . -E -ssadd -sstype p
2. 在 DESKTOP-AP 上,透過 sa 與 密碼,建立 ASPState 資料庫儲存 Session State 資料庫
aspnet_regsql.exe -S DESKTOP-AP -U sa -P pw -ssadd -sstype p
3. 在 DESKTOP-AP上,透過 sa 與 密碼,建立 MyASPState 資料庫儲存 Session State 資料庫
aspnet_regsql.exe -S DESKTOP-AP -U sa -P pw -ssadd -sstype c -d MyASPState
下列是執行結果:
您可以透過 SSMS 連線到資料庫,可以發現新增了 ASPState 資料庫
逐一設定站台 Web.conifg 內 SessionState
若是沒有自訂資料庫名稱,透過 Windows 驗證,則在該站台底下 web.config 內,system.web 內加上
若是自訂資料庫名稱,透過 Windows 整合驗證,則在該站台底下 web.config 內,system.web 內加上:
若是自訂資料庫名稱,透過 SQL Server 帳號/密碼驗證,則在該站台底下 web.config 內,system.web 內加上:
理所當然,你也可開啟 IIS > 點選站台 > 工作階段狀態 (SessionState),直接透過圖形化介面方式設定 (兩者擇一即可)
以上,即完成設定
備註:正常情況下,每一類型應用程應該有自己的資料庫儲存 Session State 資料,不同類型的網站不應該共用相同資料庫。
0 留言