ASP.NET 提供多種狀態保存機制,分為客戶端 (ViewState、HiddenField、Cookie、QueryString) 與伺服器端 (Session、Application、Cache、Database)。本文詳細比較四大客戶端選項的優缺點、適用情境、安全性與容量限制。
| 機制 | 儲存位置 | 容量 | 安全性 | 壽命 | 典型用途 |
|---|---|---|---|---|---|
| ViewState | 頁面隱藏欄位 (__VIEWSTATE) | 建議 < 100KB | 中 (Base64 + 可選 MAC/加密) | 單一頁面回傳週期 | 頁面級狀態:GridView 排序、分頁、控制項屬性 |
| HiddenField | 頁面隱藏欄位 | 建議 < 100KB | 低 (明文可見) | 單一頁面回傳週期 | 客戶端腳本暫存值、驗證後回傳單一值 |
| Cookie | 瀏覽器 Cookie 存儲 | 4KB / 個,每域 ~20 個 | 低 (可竄改、可攔截) | 可設定過期時間 (持久/會話) | 記住登入帳號、個人化偏好、追蹤識別碼 |
| QueryString | URL 參數 | ~2000 字元 (IE 限制) | 極低 (明文、書籤、日誌皆可見) | 單一請求 | 頁面間傳遞非敏感 ID、搜尋關鍵字、分頁頁碼 |
EnableViewState="false")、避免存放 DataSet/大型集合、敏感資料勿存。form method="post" 回傳,GET 請求不會攜帶。Server.UrlEncode/UrlDecode)。