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

Java Servlet Cookie 完全指南:原理、API 與實戰代碼

     編輯:Java 程式設計入門

Cookie 本質

  • 小型鍵值數據,嵌入 HTTP 請求/回應頭
  • 服務端生成 → 回應頭 Set-Cookie → 瀏覽器存儲於文本文件
  • 後續請求自動攜帶 Cookie 頭發送給同域服務端
  • 可設定過期時間(Max-Age),過期自動刪除不再發送

Servlet Cookie API 核心類

javax.servlet.http.Cookie 封裝操作:

寫入 Cookie:回應端

Cookie cookie = new Cookie("userId", "12345");
cookie.setMaxAge(3600);        // 1 小時
cookie.setPath("/myapp");      // 僅 /myapp 路徑可見
cookie.setHttpOnly(true);      // 安全加固
response.addCookie(cookie);    // 寫入 Set-Cookie 頭

讀取 Cookie:請求端


Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (Cookie c : cookies) {
        if ("userId".equals(c.getName())) {
            String userId = c.getValue();
            // 業務邏輯
            break;
        }
    }
}

完整實戰:ShowCookies Servlet


import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class ShowCookies extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();

        Cookie[] cookies = req.getCookies();

        out.println("Cookie 信息");

        if (cookies == null || cookies.length == 0) {
            out.println("

無 Cookie

"); } else { out.println("

請求攜帶的 Cookies

"); out.println("
方法說明
new Cookie(name, value)創建,名值必須符合 HTTP Token 規範
setMaxAge(int seconds)生存秒數;< 0 = 會話級;0 = 立即刪除
setDomain(String)可見域(如 .example.com 含子域)
setPath(String)可見路徑前綴(如 /app)
setSecure(boolean)僅 HTTPS 發送
setHttpOnly(boolean)JS 不可讀(防 XSS),Servlet 3.0+
getName()/getValue()讀取
"); for (Cookie c : cookies) { out.printf("", c.getName(), c.getValue(), c.getComment(), c.getMaxAge()); } out.println("
NameValueCommentMaxAge
%s%s%s%d
"); } out.println(""); } }

安全考量

  • 敏感數據禁用 Cookie:Session ID、Token 應用 HttpOnly + Secure
  • 防 CSRF:關鍵操作驗證 SameSite (Servlet 5.0+/Cookie 設定) 或雙重提交 Token
  • 防 XSS:輸出 Cookie 值時 HTML 轉義
  • 大小限制:單 Cookie ≤ 4KB,單域 ≤ 20-50 個,超限會被瀏覽器丟棄

最佳實踐清單

  1. 命名規範:前綴業務域(如 app_userId)
  2. 最小權限:Path 限制最窄路徑,Domain 僅必要時跨子域
  3. 加密敏感值:AES-GCM 加密後存儲,服務端解密
  4. 定期輪換:登入態 Cookie 設定較短 MaxAge,配合 Refresh Token
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved