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

ASP.NET 狀態保存完整指南:ViewState、HiddenField、Cookie、QueryString 比較

     編輯:關於ASP.NET

ASP.NET 提供多種狀態保存機制,分為客戶端 (ViewState、HiddenField、Cookie、QueryString) 與伺服器端 (Session、Application、Cache、Database)。本文詳細比較四大客戶端選項的優缺點、適用情境、安全性與容量限制。

比較總表

機制儲存位置容量安全性壽命典型用途
ViewState頁面隱藏欄位 (__VIEWSTATE)建議 < 100KB中 (Base64 + 可選 MAC/加密)單一頁面回傳週期頁面級狀態:GridView 排序、分頁、控制項屬性
HiddenField頁面隱藏欄位建議 < 100KB低 (明文可見)單一頁面回傳週期客戶端腳本暫存值、驗證後回傳單一值
Cookie瀏覽器 Cookie 存儲4KB / 個,每域 ~20 個低 (可竄改、可攔截)可設定過期時間 (持久/會話)記住登入帳號、個人化偏好、追蹤識別碼
QueryStringURL 參數~2000 字元 (IE 限制)極低 (明文、書籤、日誌皆可見)單一請求頁面間傳遞非敏感 ID、搜尋關鍵字、分頁頁碼

詳細解析

1. ViewState

  • 優點:自動管理、支援豐富型別 (String, Int, Bool, Array, ArrayList, Hashtable, 可序列化物件)、可啟用 MAC/加密。
  • 缺點:增加頁面體積、Base64 編碼約增大 33%、大量資料影響傳輸速度。
  • 最佳實務:關閉不需要的控制項 (EnableViewState="false")、避免存放 DataSet/大型集合、敏感資料勿存。

2. HiddenField

  • 僅支援字串值,多值需自行編碼 (JSON、分隔符)。
  • 必須配合 form method="post" 回傳,GET 請求不會攜帶。
  • 適合客戶端腳本驗證後暫存單一值 (如確認刪除的 ID)。

3. Cookie

  • 跨頁面、跨會話 (持久 Cookie) 共享。
  • 用戶可禁用 Cookie,程式需優雅降級。
  • 敏感資料 (密碼、Token) 絕不可存;僅存識別碼 (GUID),伺服器端對應 Session/資料庫。

4. QueryString

  • 最簡單的頁面間傳值,書籤可保存狀態。
  • 長度限制、編碼問題 (需 Server.UrlEncode/UrlDecode)。
  • 不可用於機敏資料、大量資料、POST 回傳頁面。

選擇決策樹

  1. 需在同一頁回傳間保持控制項狀態 → ViewState。
  2. 需在同一頁回傳傳遞單一簡單值給伺服器 → HiddenField。
  3. 需跨頁面、跨會話記住使用者偏好/身分 → Cookie。
  4. 需頁面間跳轉傳遞非敏感參數 → QueryString。
  5. 敏感/大量/長期資料 → 伺服器端 (Session/Cache/Database)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved