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

ASP.NET Cookie 完整指南:從基礎操作到「記住我」登入實作

     編輯:ASP.NET 基礎

一、Cookie 基礎觀念

什麼是 Cookie?

Cookie 是伺服器寫入客戶端硬碟或記憶體的小型文字檔(約 4KB),用於記錄使用者 ID、瀏覽歷程、停留時間等資訊。下次造訪時瀏覽器自動送回,伺服器透過讀取 Cookie 識別使用者,實現免登入、個人化顯示等功能。

儲存位置與安全性

  • 儲存形式:瀏覽器記憶體(Session Cookie,關閉瀏覽器消失)或硬碟(Persistent Cookie,有效期內保留)
  • 瀏覽器差異:各瀏覽器儲存路徑不同
  • 安全性警示:Cookie 內容明文可讀,敏感資料必須加密,避免存放密碼、信用卡號等機密資訊

二、檢視 Cookie 儲存位置

Cookie 儲存位置檢視
瀏覽器 Cookie 儲存路徑示意

三、Cookie 核心程式碼操作

1. 寫入 Cookie

HttpCookie cookie = new HttpCookie("id", "234");
Response.Cookies.Add(cookie); 
// 相當於寫入鍵值對 id:234

2. 讀取 Cookie

HttpCookie cookie = new HttpCookie("id", "234");
Response.Cookies.Add(cookie);
Response.Write(Request.Cookies["id"].Value); 
// 輸出:234

風險提示:明文可讀,驗證 Cookie 不安全性,勿存放敏感資料。

3. 設定有效期限

HttpCookie cookie = new HttpCookie("id", "234");
cookie.Expires = DateTime.Now.AddMonths(5); // 5個月後過期
Response.Cookies.Add(cookie);

過期後瀏覽器自動清除檔案,避免垃圾檔堆積。

4. 刪除/銷毀 Cookie

HttpCookie cookie = new HttpCookie("id", "234");
cookie.Expires = DateTime.Now.AddMonths(-5); // 設定過去時間強制失效
Response.Cookies.Add(cookie);

四、實戰範例:實作「記住我」自動登入

前端表單 (Login.aspx)

<form id="form1" method="post" action="rembPage.aspx">
  <div>
    帳號:<input type="text" name="userName" /><br />
    密碼:<input type="password" name="pass" /><br />
    記住我:<input type="checkbox" value="rem" name="sele1" /><br />
    <input type="submit" value=" 登入 " />
  </div>
</form>

後端邏輯 (rembPage.aspx.cs)

protected void Page_Load(object sender, EventArgs e)
{
    // 檢查是否已有 Cookie(第二次造訪)
    if (Request.Cookies["userName"] == null && Request.Cookies["passWord"] == null)
    {
        // 首次登入,驗證表單資料
        if (Request.Form["userName"] != null && Request.Form["pass"] != null)
        {
            string userName = Request.Form["userName"];
            string userPassWord = Request.Form["pass"];
            
            if (userName == "admin" && userPassWord == "123") // 實際應查資料庫
            {
                if (Request.Form["sele1"] != null) // 勾選「記住我」
                {
                    HttpCookie cookieUserName = new HttpCookie("userName", userName);
                    HttpCookie cookiePassWord = new HttpCookie("passWord", userPassWord);
                    
                    cookieUserName.Expires = DateTime.Now.AddDays(2);      // 2天有效
                    cookiePassWord.Expires = new DateTime(2012, 5, 27);    // 指定日期
                    
                    Response.Cookies.Add(cookieUserName);
                    Response.Cookies.Add(cookiePassWord);
                }
                Response.Redirect("1.aspx"); // 登入成功導向
            }
        }
    }
    else
    {
        // 偵測到 Cookie,直接導向內容頁(免登入)
        Response.Redirect("1.aspx");
    }
}

五、最佳實務總結

  1. 加密敏感資料:寫入 Cookie 前加密(如 AES),讀取後解密
  2. 設定 HttpOnly:cookie.HttpOnly = true; 防止 XSS 攻擊竊取
  3. 設定 Secure:cookie.Secure = true; 僅 HTTPS 傳輸
  4. 限制域與路徑:cookie.Domain、cookie.Path 縮小作用範圍
  5. 避免過度使用:大量 Cookie 影響請求效能,單域名限制 20-50 個、總大小 4KB

JavaScript 操作 Cookie 部分將於後續文章補充。

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