Cookie 是 Web 開發中實現會話追蹤、用戶識別的核心機制之一。在 Java Web 開發中,javax.servlet.http.Cookie 類提供了完整的操作 API。本文將系統整理 Cookie 的建立、讀取、刪除以及路徑、生命週期等關鍵細節,並附上完整範例代碼,幫助開發者避開常見陷阱。
Cookie cookie = new Cookie("key", "value");
構造函數接收鍵值對,值不支援中文或特殊字符,需自行編碼(如 URLEncoder.encode)。
setMaxAge(int seconds)cookie.setMaxAge(60); // 60 秒後過期
setPath(String path)cookie.setPath("/test/test2");
request.getContextPath() + url-pattern)。response.addCookie(cookie);
Cookie[] cookies = request.getCookies();
null,需做非空判斷。getName()/getValue() 取值。刪除本質是建立同名、同路徑、MaxAge=0 的 Cookie 覆蓋:
Cookie cookie = new Cookie("key", null);
cookie.setMaxAge(0);
cookie.setPath("/test/test2"); // 必須與建立時路徑一致
response.addCookie(cookie);
關鍵點:路徑、名稱大小寫必須完全一致,否則無法刪除。
cindex.jsp - 顯示頁面
<%@ page contentType="text/html; charset=utf-8" %>
<html><body>
<%
String username = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if ("cookies_user".equals(c.getName())) {
username = c.getValue();
break;
}
}
}
if ("onepc".equals(username)) {
out.println("Hello");
} else {
%>
<form method="post" action="clogin.jsp">
用戶名:<input type="text" name="user" /><br/>
過期時間:
<select name="expire">
<option value="31536000">一年</option>
<option value="120">兩分鐘</option>
</select><br/>
<input type="submit" value="登入" />
</form>
<% } %>
</body></html>
clogin.jsp - 處理登入並寫入 Cookie
<%
String user = request.getParameter("user");
String expire = request.getParameter("expire");
Cookie cookie = new Cookie("cookies_user", user);
cookie.setMaxAge(Integer.parseInt(expire));
response.addCookie(cookie);
response.sendRedirect("cindex.jsp");
%>
假設路徑結構:/test/test2/test345/test555/test666
/test/test2 → /test → /);名稱含大寫或混合大小寫時不向上查找,僅刪當前路徑。/test/test2 → /test → /),不可跨層級。/app1、/app2)切勿設定 Path=/,否則 Cookie 會互相干擾。HttpOnly、Secure(HTTPS)屬性防 XSS/竊聽(Servlet 3.0+ 支援 cookie.setHttpOnly(true))。URLEncoder.encode(value, "UTF-8") / URLDecoder.decode。