Session 資料儲存在伺服器端,客戶端僅保留 ASP.NET_SessionId Cookie。瀏覽器每次請求攜帶此 Cookie,伺服器以此關聯使用者狀態。若 Cookie 遺失或超過 20 個上限,Session 將中斷,需在程式碼中備份/還原 SessionID Cookie(見文中程式碼範例)。
| 模式 | 儲存位置 | 效能 | 適用場景 |
|---|---|---|---|
| Off | 停用 | — | 無 Session 需求 |
| InProc | IIS 工作進程記憶體 | 最高 | 單機、非關鍵資料 |
| StateServer | aspnet_state.exe 獨立程序 | -10~15% | Web Farm、中小流量 |
| SQLServer | SQL Server 資料庫 | -10~20% | 高可用、大型叢集、資料持久化 |
| Custom | 自訂提供者 | 視實作 | Redis、MongoDB 等非關聯式儲存 |
aspnet_state 服務 (設為自動),修改登錄檔 AllowRemoteConnection=1、Port=42424。Web.config:<sessionState mode="StateServer" stateConnectionString="tcpip=192.168.1.100:42424" cookieless="false" timeout="60" />/LM/W3SVC/1/ROOT) 大小寫需完全相同。Machine.config 已載入 SessionStateModule。InstallSqlState.sql;aspnet_regsql.exe -S . -E -ssadd -sstype p (建立 ASPState 資料庫) 或 -sstype c -d CustomDB (自訂資料庫)。Web.config:<sessionState mode="SQLServer" sqlConnectionString="server=192.168.1.100;uid=sa;pwd=***" /><sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="server=192.168.1.100;database=MyAspState;uid=sa;pwd=***" />ASPState 與 tempdb 的 db_owner 權限。cookieless="UseUri" 可將 SessionID 嵌入 URL,但有安全風險。HttpContext,不可用 Response.Redirect、Server.Transfer。作者已在生產環境以 SQLServer 模式實現多台伺服器 Session 共用,重啟 IIS 不影響使用者預訂流程。部署時務必做好 MachineKey 同步、資料庫維護計畫與監控告警,確保高可用性。