| 值 | 含義 | 存儲位置 | 過期時間 |
| > 0 | 持久化 Cookie | 硬盤 | 指定秒數後過期 |
| = 0 | 立即刪除 | 內存/硬盤 | 瀏覽器立即移除 |
| < 0 (默認 -1) | 會話級 Cookie | 內存 | 瀏覽器進程關閉時過期 |
實際代碼示例
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");
- 上一篇文章: Android項目導入Eclipse全流程:環境配置、Gradle遷移與常見錯誤排查
- 下一篇文章: C++學生成績管理系統課程設計:菜單驅動、鏈表存儲與功能模塊化實現
Copyright ©
程式碼之家 All Rights Reserved