首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java Web 登錄狀態保持:Session 與 Cookie 方案對比

     編輯:程式設計綜合問答

需求:Servlet+JSP+MySQL 登錄系統,跳轉頁面時保持賬號狀態。標準方案:

Session(服務端狀態)

// 登錄成功
HttpSession session = request.getSession();
session.setAttribute("user", user);  // 存入用戶對象或 ID
session.setMaxInactiveInterval(30*60); // 30 分鐘超時

// 後續頁面
User user = (User) session.getAttribute("user");
if (user == null) response.sendRedirect("login.jsp");
  • 優點:敏感數據不暴露客戶端、可存複雜對象
  • 缺點:集群需 Session 共享(Redis/Sticky Session)

Cookie(客戶端狀態)

Cookie cookie = new Cookie("uid", user.getId());
cookie.setMaxAge(7*24*3600); // 7 天
cookie.setPath("/");
response.addCookie(cookie);

// 讀取
Cookie[] cookies = request.getCookies();
// 遍歷找 uid,查庫恢復用戶對象
  • 優點:無服務端存儲壓力、天然支援集群
  • 缺點:大小限 4KB、易被竄改/攔截、需加密簽名

最佳實踐

  • Session 存用戶 ID,敏感權限數據加密存 Cookie
  • 使用框架(Shiro/Spring Security)統一管理,避免手寫漏洞
  • HTTPS 傳輸防止會話劫持
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved