| 成員 | 類型 | 說明 |
|---|---|---|
Name | 屬性 | Cookie 名稱 (唯一識別) |
Value | 屬性 | 單一值 (不含子鍵時) |
Expires | 屬性 | 過期時間 (DateTime),MinValue=Session Cookie |
Domain | 屬性 | 適用域名 (如 .example.com) |
Path | 屬性 | 適用路徑 (預設 /) |
Secure | 屬性 | 僅 HTTPS 傳輸 |
HttpOnly | 屬性 | 禁止 JS 存取 |
HasKeys | 屬性 | 是否包含子鍵 |
Item[key] | 索引子 | 存取子鍵值 |
// 單值
HttpCookie c1 = new HttpCookie("UserName", "Admin");
c1.Expires = DateTime.Now.AddDays(7);
Response.Cookies.Add(c1);
// 子鍵
HttpCookie c2 = new HttpCookie("UserProfile");
c2["RealName"] = "張三";
c2["Role"] = "Manager";
c2.Expires = DateTime.Now.AddHours(2);
Response.Cookies.Add(c2);
// 單值
if (Request.Cookies["UserName"] != null)
lblMsg.Text = Request.Cookies["UserName"].Value;
// 子鍵
if (Request.Cookies["UserProfile"] != null)
{
string name = Request.Cookies["UserProfile"]["RealName"];
string role = Request.Cookies["UserProfile"]["Role"];
}
Default1.aspx (寫入)
protected void btnSave_Click(object sender, EventArgs e)
{
HttpCookie c = new HttpCookie("CrossPage");
c.Value = "Cookie Value";
Response.Cookies.Add(c);
Response.Write("<script>alert('儲存成功');</script>");
}
protected void btnGo_Click(object sender, EventArgs e)
{
Response.Redirect("Default2.aspx");
}
Default2.aspx (讀取)
protected void btnRead_Click(object sender, EventArgs e)
{
if (Request.Cookies["CrossPage"] != null)
{
Response.Write($"Name: {Request.Cookies["CrossPage"].Name}<br/>");
Response.Write($"Value: {Request.Cookies["CrossPage"].Value}<br/>");
}
else
Response.Write("Cookie 不存在或已過期");
}
| 面向 | Cookie | Session | Application |
|---|---|---|---|
| 儲存位置 | 客戶端瀏覽器 | 伺服器記憶體/StateServer/SQL | 伺服器記憶體 (進程級) |
| 生命週期 | 可設定永久/過期 | 預設 20 分鐘滑動過期 | 應用程式存活期間 |
| 容量 | 4KB/個,~20個/域 | 視伺服器記憶體 | 視伺服器記憶體 |
| 安全性 | 可被竄改/偽造 | 僅 SessionID 傳遞,資料在伺服器 | 伺服器端,不可直接竄改 |
| 適用場景 | 偏好設定、記住我、追蹤 | 登入狀態、購物車、敏感資料 | 全站共用計數、快取、設定 |
HttpCookie 是 ASP.NET 操作 Cookie 的核心類別。理解其屬性、子鍵結構、生命週期控制與三大狀態管理物件的定位差異,才能在正確的場合選擇正確的工具:**記住偏好用 Cookie、登入狀態用 Session、全域共用用 Application**。