首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Web 中 Cookie 完整操作指南:設定、讀取、刪除與路徑陷阱

     編輯:Java 相關知識

環境基線

JDK 1.5 + Tomcat 5.5,`javax.servlet.http.Cookie` API。

四大核心操作

1. 設定 Cookie

Cookie cookie = new Cookie("key", "value");
cookie.setMaxAge(60);                    // 60 秒存活;負數=會話級(瀏覽器關閉失效)
cookie.setPath("/test/test2");           // 路徑,預設為當前 Servlet 映射路徑
response.addCookie(cookie);

2. 讀取 Cookie

Cookie[] cookies = request.getCookies();  // 返回當前路徑及直接父路徑所有 Cookie,無則 null
if (cookies != null) {
    for (Cookie c : cookies) {
        if ("key".equals(c.getName())) {
            String val = c.getValue();
        }
    }
}

3. 刪除 Cookie

Cookie cookie = new Cookie("key", null);  // 值設 null
cookie.setMaxAge(0);                      // 0 = 立即刪除
cookie.setPath("/test/test2");            // 必須與創建時路徑完全一致
response.addCookie(cookie);

4. 路徑匹配規則(核心陷阱)

假設路徑結構:

/
/test
/test/test2
/test345
/test555/test666
操作行為瀏覽器差異
創建同名 Cookie 可在不同路徑共存一致
讀取可讀取當前路徑 + 直接父路徑(/test/test2 → /test → /)一致
刪除若當前路徑無同名,向上查找父路徑刪除最近的一個巨大差異見下

瀏覽器刪除行為差異(必須知曉)

  • Firefox:必須指定創建時的完整路徑,鍵名大小寫不敏感但路徑必須精確匹配
  • IE:
    • 鍵名全小寫:向上遞歸查找(/test/test2 → /test → /test555 → /test345 → /),不查 /test555/test666
    • 鍵名含大寫/混合:不向上查找,僅刪除當前路徑

多 Web 應用部署警示

Tomcat/Jetty 以 Context 隔離應用,各有獨立 path。嚴禁設定 path="/" 的 Cookie,否則同域名下不同應用互相污染、誤刪、誤讀。除非刻意設計 SSO 共享 Cookie,否則每個應用僅用自己的 Context Path。

最佳實踐清單

  1. 創建/刪除必須显式 setPath,不可依賴預設值
  2. 鍵名統一小寫,避免 IE 大小寫陷阱
  3. 敏感資料勿存 Cookie,改用 Session + Token
  4. 設定 HttpOnly=true(Servlet 3.0+ `` 或 `cookie.setHttpOnly(true)`)防 XSS
  5. HTTPS 環境必須 setSecure(true)
  6. 域名共享時慎用 setDomain(".example.com"),理解子域傳遞風險

結語

Cookie 看似簡單,路徑匹配、瀏覽器差異、多應用隔離卻暗藏殺機。掌握顯式路徑、小寫鍵名、HttpOnly/Secure、Context 隔離四大鐵律,才能在生產環境穩健使用 Cookie。下次遇到「明明設了卻讀不到」或「刪不掉」,先查路徑、再查瀏覽器、最後查大小寫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved