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

JSP 實現「記住我」免登錄:Session 與 Cookie 協同策略

     編輯:程式設計疑難解答

業務流程

  1. 用戶訪問受保護頁面。
  2. 檢查 Session:若存在 user 屬性 → 直接放行。
  3. 檢查 Cookie:若無 Session,讀取 Cookie autoLoginToken。
    • Token 有效(數據庫校驗通過) → 重建 Session,放行。
    • Token 無效/過期 → 刪除 Cookie,跳轉登錄頁。
  4. 無 Session 且無 Cookie → 直接跳轉登錄頁。

關鍵實現點

  • 登錄成功時:若用戶勾選「記住我」,生成隨機 Token,存入數據庫(關聯 user_id、過期時間),寫入 Cookie:
    Cookie cookie = new Cookie("autoLoginToken", token); cookie.setMaxAge(3*24*3600); // 3天 cookie.setPath("/"); response.addCookie(cookie);
  • 攔截器/過濾器:統一在 Filter 中實現上述邏輯,避免各 Servlet 重復代碼。
  • 安全性:Token 應為加密隨機串,防暴力猜解;數據庫存儲哈希值;HTTPS 傳輸。

代碼結構建議

@WebFilter("/*")
public class AutoLoginFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpSession session = request.getSession(false);
        if (session != null && session.getAttribute("user") != null) {
            chain.doFilter(req, resp); return;
        }
        // 檢查 Cookie...
        chain.doFilter(req, resp);
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved