Cookie 是伺服器在客戶端瀏覽器儲存少量資料的機制,Response.Cookies 負責寫入,Request.Cookies 負責讀取。由於 HTTP 無狀態,Cookie 成為辨識回訪使用者的關鍵。
Response.Cookies(Cookie名稱)[(Key)] = 值
Response.Cookies(Cookie名稱).屬性 = 值
Response.Cookies("User")("UserName") = "Tom"。Expires(到期日)、Domain、Path、Secure、HasKeys。Expires = Date() + 天數 可持久化至硬碟。<%
Response.Cookies("User")("UserName") = "含笑"
Response.Cookies("User")("password") = "111111"
Response.Cookies("User").Expires = Date() + 1 ' 1 天有效
%>
<html><head><title>使用者登入</title></head><body>
<center>
<form name="Form1" method="get" action="4-2a2.asp">
<p>用戶姓名:<input name="UserName1" type="text">
<p>密碼:<input name="password1" type="password">
<input type="submit" name="btnSubmit" value="提交">
<input type="reset" name="reset" value="重寫">
</form>
</center></body></html>
<%@ Language="VBScript" %>
<% Response.Buffer = True %>
<html><head><title>Cookie 讀寫示範</title></head><body>
<center>
<%
Dim UserName, password, a, b
UserName = Request.QueryString("UserName1")
password = Request.QueryString("password1")
a = Request.Cookies("User")("UserName")
b = Request.Cookies("User")("password")
%>
<font size="7" color="red" face="華文彩雲">
<%
If UserName = a And password = b Then
Response.Write "您已登入成功!"
Else
Response.Redirect "4-2a1.asp"
End If
%>
</font>
<hr size="2" width="70%" color="#cc9999">
<%
Response.Cookies("User").Expires = Date() + 100 ' 登入成功延長至 100 天
%>
<a href="4-2a1.asp">返回上一頁</a> ***||*** <a href="4-2-2.asp">返回教材</a>
</center></body></html>
Windows\CookiesC:\Users\<使用者>\AppData\Roaming\Microsoft\Windows\Cookies(或 INetCookies)可用開發者工具(F12 → Application/Storage → Cookies)即時檢視、編輯、刪除。
| 風險 | 對策 |
|---|---|
| 明文傳輸被竊聽 | 設定 Response.Cookies("Name").Secure = True(僅 HTTPS 送出) |
| 跨站腳本 (XSS) 竊取 Cookie | 設定 HttpOnly(ASP 原生不支援,需 IIS 7+ 模組或自行在標頭加入) |
| Cookie 遭竄改/偽造 | 敏感資料加密、簽章驗證、或改用 Session/資料庫 Token |
| 超大 Cookie 影響效能 | 單一 Cookie ≤ 4KB,總數 ≤ 20~50 個/網域;大量資料改用 Server-side Session |
' 寫入多層字典
Response.Cookies("Profile")("Name") = "Tom"
Response.Cookies("Profile")("Role") = "Admin"
Response.Cookies("Profile")("Theme") = "Dark"
Response.Cookies("Profile").Expires = Date() + 30
' 讀取並檢查 HasKeys
If Request.Cookies("Profile").HasKeys Then
For Each key In Request.Cookies("Profile")
Response.Write key & " = " & Request.Cookies("Profile")(key) & "<br>"
Next
End If
善用 Response.Cookies 字典結構,能以單一 Cookie 名稱管理多組相關設定,減少網域 Cookie 數量上限壓力。