Cookie cookie = new Cookie("key", "value");
cookie.setMaxAge(60); // 60 秒生存期;負值 = 會話級(瀏覽器關閉失效)
cookie.setPath("/test/test2"); // 指定路徑;默認為當前 Servlet 路徑
response.addCookie(cookie);
Cookie[] cookies = request.getCookies(); // 返回當前路徑及直接父路徑所有 Cookie;無則返回 null
Cookie cookie = new Cookie("key", null);
cookie.setMaxAge(0); // 0 = 立即刪除
cookie.setPath("/test/test2"); // 必須與創建時路徑一致
response.addCookie(cookie);
假設路徑結構:/test/test2/test345/test555/test666
| 場景 | Firefox (FF) | Internet Explorer (IE) |
|---|---|---|
| 同名 Cookie 可存在於不同路徑 | ✅ 兩者一致 | |
| 刪除時向上查找父路徑 | ✅ 僅刪除最近父路徑同名 Cookie | ✅ 但行為受大小寫影響(見下) |
| 大小寫敏感度 | ⚠️ 必須指定創建時相同路徑,鍵名大小寫皆敏感 | 鍵名小寫:向上查找 /test/test2 → /test → /test555 → /test345 → / 鍵名大寫/混合:默認僅刪除當前路徑,不向上查找 |
| 讀取範圍 | 📖 僅當前路徑 + 直接父路徑(如 /test/test2 讀取 /test/test2、/test、/) | |
Tomcat/Jetty 以 Context 隔離 Web 應用,各有獨立 Path。同域名下部署多應用時,嚴禁設置 Path=/ 的 Cookie,極易造成跨應用誤讀/誤刪。應為每個應用設置獨立路徑前綴(如 /app1/、/app2/)。
setPath()。HttpOnly、Secure 標誌(Servlet 3.0+ 支持 cookie.setHttpOnly(true))。setDomain(".example.com")),確保跨子域共享。