狀態管理定義
在無狀態 HTTP 協定上,跨請求維護用戶資料與頁面資訊的機制。
選型決策矩陣
| 考量因素 | 關鍵問題 |
| 資料量 | 大 → 伺服器端;小 → 客戶端可行 |
| Cookie 支援 | 不支援 → Cookieless Session / ViewState |
| 儲存位置 | 敏感資料 → 伺服器端;非敏感 → 客戶端可接受 |
| 效能/頻寬 | 高併發/行動裝置 → 減少 ViewState/大型 Cookie |
| 存活時間 | 跨 Session → Profile/資料庫;單頁 → ViewState/ControlState |
| 部署拓撲 | Web Farm/Garden → 共用 Session State Server / SQL Session |
客戶端選項
ViewState
- 優點:無伺服器資源、內建啟用、Hash+壓縮+Base64 安全性較隱藏欄位高。
- 缺點:大量資料增加頁面體積、行動裝置頻寬壓力、Base64 可解碼竄改 (需啟用 MAC/加密)。
伺服器端選項
- Session State:InProc/StateServer/SQLServer/Custom 三模式,支援 Web Farm。
- Application State:全域單一執行個體資料,需自行同步鎖定。
- Cache:依賴過期/回呼、記憶體壓力淘汰,高效能讀取。
- Profile:強型別使用者設定,Provider 儲存,自動識別用戶。
- Database:終極持久化,結構化查詢、交易支援。
最佳實務建議
- 預設啟用
enableViewStateMac="true"、viewStateEncryptionMode="Auto"。
- 敏感資料 (權限、金額) **絕不**放入 ViewState/Cookie。
- 大物件、共用資料 → Cache + SQL 後端。
- 使用者個人化 → Profile Provider。
- Web Farm 必須使用 StateServer/SQLServer/Custom Session 模式。