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

Cookie 實戰指南:優缺點分析與最佳應用場景

     編輯:關於ASP.NET

Cookie 現狀

雖然新技術層出不窮,Cookie 仍是 Web 開發基石。許多人視其為「雞肋」,主要缺點:

  • 不安全:儲存於客戶端,易被竄改、盜取(XSS)。
  • 容量限制:單一 Cookie ≤ 4KB,總數限制約 300 個/網域。
  • 用戶可禁用:隱私模式或設定封鎖導致失效。

但優點同樣明顯:

  • 極簡單:Key-Value 文字結構,讀寫方便。
  • 零伺服器資源:由伺服器建立、儲存於客戶端。
  • 靈活過期控制:Session Cookie(瀏覽器關閉即失效)、持久 Cookie(指定日期)、永久 Cookie。

適合儲存的資料

僅限「非機密、可識別使用者身分」的資訊:使用者偏好設定、語言選擇、購物車 ID、追蹤代碼等。嚴禁存放密碼、信用卡號、Session ID 等敏感資料。

基本操作語法

寫入 Cookie

Response.Cookies["UserName"].Value = "JohnDoe";
Response.Cookies["UserName"].Expires = DateTime.Now.AddDays(30); // 持久 30 天
// 或 Response.Cookies["UserName"].Expires = DateTime.MinValue; // Session Cookie

讀取 Cookie

if (Request.Cookies["UserName"] != null)
{
 string userName = Request.Cookies["UserName"].Value;
}

完整範例:記錄客戶端 IP

// 寫入
string userIP = Request.UserHostAddress;
Response.Cookies["ClientIP"].Value = userIP;
Response.Cookies["ClientIP"].Expires = DateTime.MaxValue; // 永久

// 讀取
Response.Write("您的 IP:" + Request.Cookies["ClientIP"]?.Value);

進階技巧

1. 子網域共享 Cookie

Response.Cookies["DomainCookie"].Domain = ".example.com"; // 所有子網域可讀

2. HttpOnly 與 Secure 標記

// 防止 JavaScript 存取(緩解 XSS)
Response.Cookies["AuthToken"].HttpOnly = true;
// 僅 HTTPS 傳輸
Response.Cookies["AuthToken"].Secure = true;

也可在 `web.config` 全域設定:

<system.web>
 <httpCookies httpOnlyCookies="true" requireSSL="false" />
</system.web>

3. 編碼處理中文值

Response.Cookies["ChineseName"].Value = Server.UrlEncode("中文名稱");
// 讀取時
string name = Server.UrlDecode(Request.Cookies["ChineseName"].Value);

安全性最佳實踐

  1. 敏感操作改用 Server-side Session 或加密 Token。
  2. 重要 Cookie 設定 `HttpOnly=true`、`Secure=true`(HTTPS 站台)。
  3. 定期輪換 Cookie 名稱/值,降低長期追蹤風險。
  4. 遵循 GDPR/隱私法規,提供 Cookie 同意機制。

總結

Cookie 並未過時,只要用在正確場景(非敏感、小量、需跨請求持久),仍是最輕量、相容性最好的選擇。關鍵在於理解其限制並採取適當防護。

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