Cookie 是 HTTP 無狀態特性下實現會話追蹤、個人化體驗與權限控制的核心機制。本文透過六個完整實戰案例,系統講解 Cookie 的建立、讀取、權限隔離、刪除策略、實際業務場景應用(登入記錄、瀏覽歷史)與瀏覽器限制測試。
new Cookie(name, value):建立 Cookie,值需 URL 編碼支援中文setMaxAge(seconds):設定存活秒數,負數=會話級,0=刪除,正數=持久化setPath(path):權限控制關鍵,僅同路徑或子路徑的 Servlet 可存取response.addCookie(cookie):寫入回應標頭request.getCookies():讀取請求標頭中的所有 Cookie關鍵點:中文值必須經 URLEncoder.encode(value, "UTF-8") 編碼寫入,讀取時用 URLDecoder.decode(value, "UTF-8") 解碼。設定 setPath("/") 讓全專案可存取。
Cookie 的 path 屬性決定可見範圍:
path="/project/CookieDemo" → 僅 /CookieDemo 及其子路徑可見path="/project/servlet/CookieDemo2" → 僅 /servlet/CookieDemo2 及其子路徑可見驗證結果:父路徑 Servlet 可讀取子路徑 Cookie,反之不可。同名不同路徑視為不同 Cookie,互不覆蓋。
刪除必須精確匹配原建立時的 name、path、domain 三要素,並設定 setMaxAge(0)。常見錯誤:路徑不一致導致刪除失敗,實際上是建立了新的即期 Cookie。
邏輯:讀取 loginTime Cookie → 解析時間戳 → 格式化顯示 → 更新為當前時間並延長有效期(如 1 年)。首次訪問顯示「首次拜訪」。
單一 Cookie 值以逗號分隔儲存檔名(如 img3.jpg,img1.jpg,img2.jpg)。核心邏輯:
JSP 端透過 request.getCookies() 解析並渲染縮圖。
| 場景 | 建議設定 |
|---|---|
| 會話追蹤 | setMaxAge(-1), path="/" |
| 記住登入 | setMaxAge(30天), path="/", HttpOnly=true, Secure=true |
| 敏感權限隔離 | 精確 path 限制存取範圍 |
| 中文內容 | URLEncoder/Decoder UTF-8 編解碼 |
| 大量資料 | 改用 Session/資料庫,Cookie 僅存 ID |
透過本文六大實戰案例,你已掌握 Cookie 從基礎操作到進階權限控制、業務建模與效能邊界測試的完整知識體系,可直接應用於實際 Java Web 專案開發。