Cookie 通常通過 HTTP 響應頭 Set-Cookie 設置,格式如下:
HTTP/1.1 200 OK Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; path=/; domain=w3cschool.cc
關鍵屬性:
name=value:鍵值對,會被 URL 編碼expires:過期時間(GMT 格式),過期後瀏覽器自動刪除path:生效路徑,默認為當前目錄domain:生效域名| 方法 | 說明 |
|---|---|
setDomain(String) / getDomain() | 設置/獲取適用域名 |
setMaxAge(int) / getMaxAge() | 設置/獲取最大生存時間(秒),-1 表示會話級,0 表示刪除 |
getName() | 獲取 Cookie 名稱(創建後不可變) |
setValue(String) / getValue() | 設置/獲取 Cookie 值 |
setPath(String) / getPath() | 設置/獲取生效路徑(需以 / 結尾) |
setSecure(boolean) | 是否僅在 HTTPS 下傳輸 |
setComment(String) / getComment() | 設置/獲取用途說明 |
Cookie cookie = new Cookie("key", "value");
cookie.setMaxAge(60 * 60 * 24); // 1 天(秒)
response.addCookie(cookie);
cookie.setMaxAge(0); // 設置為 0 即刪除 response.addCookie(cookie);
cookie.setPath("/sessionWeb/"); // 僅該路徑及子路徑可訪問
cookie.setDomain(".google.com"); // 所有 .google.com 子域可訪問
Cookie 不支持 Unicode 直接存儲,必須進行 URL 編碼:
// 寫入時編碼
Cookie cookie = new Cookie(
URLEncoder.encode("姓名", "UTF-8"),
URLEncoder.encode("張三", "UTF-8")
);
response.addCookie(cookie);
// 讀取時解碼
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
String name = URLDecoder.decode(c.getName(), "UTF-8");
String value = URLDecoder.decode(c.getValue(), "UTF-8");
// 處理 name/value
}
}
[ ] ( ) = , " / ? @ : ; 及空格setMaxAge 不調用默認為會話級(瀏覽器關閉失效)setDomain(".parent.com")setSecure(true) 配合 HTTPS