HTTP 無狀態協議,每次請求獨立,伺服器不保留記憶。ASP.NET 提供三種模式:InProc (記憶體、最快但重啟遺失)、StateServer (獨立狀態服務)、SQLServer (資料庫、最可靠、支援叢集/容錯移轉)。
<sessionState
mode="SQLServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;user id=username;password=password"
cookieless="false"
timeout="20"
/>
注意:屬性名稱區分大小寫。
| 模式 | 儲存位置 | 優點 | 缺點 |
|---|---|---|---|
| InProc | ASP.NET 背景程序記憶體 | 速度最快 | 回收/重啟遺失、不支援 Web Farm |
| StateServer | 獨立 aspnet_state.exe 服務 | 跨進程共用、支援 Web Farm | 單點故障、序列化開銷 |
| SQLServer | SQL Server 資料庫 | 持久化、叢集高可用、安全性高 | 網路延遲、需授權、序列化開銷 |
.NET Framework 安裝目錄提供:
InstallPersistSqlState.sql:建立持久化 Session 資料庫 (預設 ASPState),重啟後資料保留。InstallSqlState.sql:建立暫存 Session 資料庫 (存於 tempdb),重啟遺失。Uninstall*.sql:移除對應物件。執行範例:sqlcmd -S . -E -i "C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallPersistSqlState.sql"
// C#
Session["UserName"] = "John";
string name = Session["UserName"] as string;
// VB.NET
Session("UserName") = "John"
Dim name As String = Session("UserName")
SQL Server Session 模式是企業級 Web Farm/叢集環境的標準選擇。正確執行安裝腳本、設定連接字串、調整 timeout、監控資料庫大小與效能,即可獲得穩定可靠的跨伺服器 Session 體驗。