首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java Servlet Cookie生命周期控制:會話級與持久化Cookie的設置與刪除

     編輯:程式設計綜合問答

核心 API

Cookie cookie = new Cookie("name", "value");
cookie.setMaxAge(int seconds); // 生命周期控制關鍵
response.addCookie(cookie);

MaxAge 取值含義

實際代碼示例

1. 會話級 Cookie(關閉瀏覽器自動失效)

Cookie sessionCookie = new Cookie("sessionId", "abc123");
sessionCookie.setMaxAge(-1); // 默認值,可省略
sessionCookie.setPath("/");  // 全路徑有效
response.addCookie(sessionCookie);

2. 持久化 Cookie(記住登錄 7 天)

Cookie rememberCookie = new Cookie("rememberMe", "token_xyz");
rememberCookie.setMaxAge(7 * 24 * 60 * 60); // 7天,單位:秒
rememberCookie.setPath("/");
rememberCookie.setHttpOnly(true); // 防 XSS
rememberCookie.setSecure(true);   // 僅 HTTPS 傳輸(生產環境必須)
response.addCookie(rememberCookie);

3. 立即刪除 Cookie(登出操作)

Cookie deleteCookie = new Cookie("rememberMe", "");
deleteCookie.setMaxAge(0); // 關鍵:設置為 0
deleteCookie.setPath("/"); // 必須與創建時 path 一致
response.addCookie(deleteCookie);

Session vs Cookie 選擇

  • Session:服務端存儲,安全、容量大、依賴 Cookie 傳遞 JSESSIONID(會話級)
  • Cookie:客戶端存儲,容量限 4KB、易被竄改、適合非敏感標識(如偏好設置、追蹤 ID)

最佳實踐:敏感數據(用戶權限、購物車)用 Session;「記住我」功能用持久化 Cookie 存儲加密 Token,驗證後重建 Session。

跨域/子域共享 Cookie

cookie.setDomain(".example.com"); // 前綴點號表示所有子域共享
// 需確保 SameSite 屬性兼容(現代瀏覽器默認 Lax)
// Java Servlet 3.0+ 無原生 SameSite 支持,需手動設置 Header
response.addHeader("Set-Cookie", "name=value; Domain=.example.com; SameSite=Lax; Secure");
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
值含義存儲位置過期時間
> 0持久化 Cookie硬盤指定秒數後過期
= 0立即刪除內存/硬盤瀏覽器立即移除
< 0 (默認 -1)會話級 Cookie內存瀏覽器進程關閉時過期