JDK 1.5 + Tomcat 5.5,`javax.servlet.http.Cookie` API。
Cookie cookie = new Cookie("key", "value");
cookie.setMaxAge(60); // 60 秒存活;負數=會話級(瀏覽器關閉失效)
cookie.setPath("/test/test2"); // 路徑,預設為當前 Servlet 映射路徑
response.addCookie(cookie);
Cookie[] cookies = request.getCookies(); // 返回當前路徑及直接父路徑所有 Cookie,無則 null
if (cookies != null) {
for (Cookie c : cookies) {
if ("key".equals(c.getName())) {
String val = c.getValue();
}
}
}
Cookie cookie = new Cookie("key", null); // 值設 null
cookie.setMaxAge(0); // 0 = 立即刪除
cookie.setPath("/test/test2"); // 必須與創建時路徑完全一致
response.addCookie(cookie);
假設路徑結構:
/ /test /test/test2 /test345 /test555/test666
| 操作 | 行為 | 瀏覽器差異 |
|---|---|---|
| 創建 | 同名 Cookie 可在不同路徑共存 | 一致 |
| 讀取 | 可讀取當前路徑 + 直接父路徑(/test/test2 → /test → /) | 一致 |
| 刪除 | 若當前路徑無同名,向上查找父路徑刪除最近的一個 | 巨大差異見下 |
Tomcat/Jetty 以 Context 隔離應用,各有獨立 path。嚴禁設定 path="/" 的 Cookie,否則同域名下不同應用互相污染、誤刪、誤讀。除非刻意設計 SSO 共享 Cookie,否則每個應用僅用自己的 Context Path。
HttpOnly=true(Servlet 3.0+ `setDomain(".example.com"),理解子域傳遞風險Cookie 看似簡單,路徑匹配、瀏覽器差異、多應用隔離卻暗藏殺機。掌握顯式路徑、小寫鍵名、HttpOnly/Secure、Context 隔離四大鐵律,才能在生產環境穩健使用 Cookie。下次遇到「明明設了卻讀不到」或「刪不掉」,先查路徑、再查瀏覽器、最後查大小寫。