常見的「記住我」功能,透過 HttpCookie 將加密後的帳號密碼存儲於客戶端,下次訪問時自動驗證登入。核心在於:Cookie 存儲密文,自動登入時直接比對密文,避免解密風險。
////// 建立登入 Cookie,有效期 14 天 /// public HttpCookie HttpSaveCookie(string name, string pass) { HttpCookie htc = new HttpCookie("userlogin"); htc.Values.Add("username", name); // 明文帳號(或加密) htc.Values.Add("userpass", pass); // 必須為密文(MD5/SHA256 等) htc.Expires = DateTime.Now.AddDays(14); return htc; }
// 使用者勾選「記住我」
if (CheckBox2.Checked) {
Response.Cookies.Add(HttpSaveCookie(strName, strPass)); // strPass 必為加密後字串
}
if (Request.Cookies["userlogin"] != null) {
HttpCookie htc = Request.Cookies["userlogin"];
string getName = htc.Values["username"].ToString();
string getPass = htc.Values["userpass"].ToString(); // 直接取得密文
// 直接以密文比對,不解密
bool isValid = SProcedure.UserLogin(getName, getPass);
if (isValid) {
// 設定驗證票據、Session、重導向等
}
}
htc.HttpOnly = true 防止 XSS 攻擊竊取 Cookiehtc.Secure = true 僅 HTTPS 傳輸此模式簡單有效,適合中小型系統;大型系統建議採用 Token 機制(JWT/OAuth)實現更安全的記憶登入。