首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 1.1 Session 狀態管理深度解析:InProc/StateServer/SQLServer 三種模式、HttpModule 管線與效能優化

     編輯:關於ASP.NET

Session 是無狀態 Web 應用維持使用者狀態的核心機制。ASP.NET 1.1 提供三種儲存模式,並透過 SessionStateModule 整合至 HTTP 管線。

三種 Session 模式完整對比

模式儲存位置序列化優點缺點適用場景
InProc (預設)aspnet_wp.exe 進程記憶體否 (物件引用)效能最快、支援任意物件進程回收遺失、不支援 Web Garden/叢集單伺服器、小型應用、開發環境
StateServeraspnet_state.exe (獨立進程/遠端機器)是進程隔離、支援 Web Garden/叢集序列化開銷、網路延遲、單點故障Web Garden、多伺服器叢集、需進程回收保持
SQLServerSQL Server 資料表 (ASPState)是高可用、支援叢集/異地備援、資料持久效能最低、需 SQL 授權、序列化限制企業級、跨資料中心、法規要求持久化

SessionStateModule 管線整合流程

  1. BeginRequest:模組啟動,讀取 web.config <sessionState> 決定模式。
  2. 2. 實例化對應 IStateClientManager (InProc/StateServer/SQLServer)。 3. AcquireRequestState:從提供者反序列化 Session 資料 → HttpSessionState 字典 → 綁定 Context.Session / Page.Session。 4. 執行頁面邏輯,開發者讀寫 Session["Key"]。 5. ReleaseRequestState:若 Session 有變更,序列化回提供者;鎖定釋放。 6. EndRequest:完成。

關鍵設定 (web.config)

<sessionState mode="SQLServer"
              sqlConnectionString="Server=DB;UID=sa;PWD=***;"
              cookieless="false"
              timeout="30"
              allowCustomSqlDatabase="true" />
  • cookieless="UseUri":將 SessionID 嵌入 URL (如 /(S(abc123))/page.aspx),支援禁用 Cookie 瀏覽器。
  • timeout:閒置分鐘數,預設 20,滑動過期。

效能優化實戰建議

  1. 縮小 Session 物件:僅存 ID/權限/少量設定,大物件存 Cache/DB 並存 Key。
  2. 2. 關閉不需要的 Session:<pages enableSessionState="false" /> 或控件 EnableSessionState="ReadOnly"。 3. StateServer 高可用:叢集部署 aspnet_state.exe,設定多台備援 IP。 4. SQLServer 優化:ASPState 資料庫置於獨立磁碟/檔案群組,啟用 READ_COMMITTED_SNAPSHOT 減少鎖定。 5. 監控:效能計數器 ASP.NET Applications\Sessions Total/Active/Timed Out。

Session_End 事件限制

僅 InProc 模式** 支援 Global.asax Session_End。StateServer/SQLServer 無法可靠觸發,清理邏輯請改用排程作業 (SQL Agent Job) 掃描過期 Session 資料表。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved