Cookie 是伺服器傳送給瀏覽器的小型純文字資訊。使用者後續造訪同一 Web 伺服器時,瀏覽器會原樣回傳這些 Cookie。透過讀取先前儲存在客戶端的資訊,網站能提供多種便利:線上交易中的用戶身分識別、低安全性場合免重複輸入帳密、入口網站首頁客製化、精準廣告投放等。
Cookie 旨在為用戶帶來便利、為網站創造增值。儘管流傳許多誤解,事實上 Cookie 不會造成嚴重安全威脅:它永遠不會被執行,故不會攜帶病毒或攻擊系統。瀏覽器通常限制總計 300 個 Cookie、單一站點最多 20 個、單一 Cookie 上限 4 KB,因此不會塞滿硬碟,也無法作為「阻斷服務」攻擊手段。
new Cookie(name, value) 建立 Cookie(§9.2.1)cookie.setXXX 設定屬性(§9.2.2)response.addCookie(cookie) 加入回應標頭(§9.2.3)呼叫 request.getCookies() 取得 Cookie 物件陣列。通常以迴圈遍歷尋找指定名稱的 Cookie,再呼叫 getValue() 取得對應值(§9.2.4)。
建構子接受兩個字串參數(名稱、值),兩者皆不得包含空白字元及 [ ] ( ) = , " / ? @ : ; 等特殊字元。
| 方法 | 功能說明 |
|---|---|
getComment/setComment | 取得/設定 Cookie 註解 |
getDomain/setDomain | 取得/設定適用域名。預設僅回傳給發送伺服器;可指定同域下其他伺服器(需以點開頭,如 .sitename.com;非國家級域需含兩點,國家級需三點) |
getMaxAge/setMaxAge | 取得/設定過期秒數。未設定則僅當前會話有效(關閉瀏覽器即失效),不寫入磁碟 |
getName/setName | 取得/設定 Cookie 名稱。名稱與值是核心關注點;getCookies() 回傳陣列故需迴圈尋找特定名稱 |
getPath/setPath | 取得/設定適用路徑。未指定則回傳給目前目錄及子目錄;setPath("/") 可讓全站頁面接收 |
getSecure/setSecure | 取得/設定 boolean,指定是否僅透過加密連線(SSL)傳送 |
getValue/setValue | 取得/設定 Cookie 值。名稱亦可作邏輯標記(存在即為 true) |
getVersion/setVersion | 取得/設定協定版本。預設版本 0(Netscape 規範);版本 1 遵循 RFC 2109 但支援度有限 |
Cookie userCookie = new Cookie("user", "uid1234");
response.addCookie(userCookie);
呼叫 HttpServletRequest.getCookies() 取得對應 HTTP 請求標頭的 Cookie 陣列,迴圈遍歷並以 getName() 比對,找到目標後呼叫 getValue() 取值。為簡化常用操作,文中提供 getCookieValue 工具方法:傳入 Cookie 陣列、名稱、預設值,回傳匹配值或預設值。
文末提供數個簡單但實用的工具函數,協助開發者高效處理 Cookie 相關邏輯。