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

JSP session 內置對象深度解析:會話管理、屬性操作與登錄驗證實戰

     編輯:關於JSP

session 是 Web 應用實現有狀態交互的核心機制,本文系統講解 session 對象 API、生命周期控制、登錄驗證典型場景及常見陷阱。

session 對象本質

  • 類型:javax.servlet.http.HttpSession 實例
  • 作用域:用戶會話級(跨請求、跨頁面)
  • 底層機制:Cookie(JSESSIONID)+ 服務端存儲(內存/資料庫/Redis)

HttpSession 核心方法

HttpSession 方法表

方法說明注意事項
getId()獲取唯一會話標識 JSESSIONID只讀,容器生成
setAttribute(name, value)存儲會話屬性value 必須可序列化(分布式環境)
getAttribute(name)獲取屬性,無則返回 null需類型轉換
removeAttribute(name)移除指定屬性
invalidate()銷毀整個會話登出操作必調用
setMaxInactiveInterval(seconds)設置超時時間(秒)覆蓋 web.xml 默認值
getMaxInactiveInterval()獲取當前超時設置
isNew()判斷是否新創建的會話客戶端未攜帶 JSESSIONID 時為 true

避坑指南:Deprecated 方法

查閱 API 時忽略標註 @Deprecated 的方法(如 getValue()/putValue()),統一使用 Attribute 系列方法。

實戰:登錄驗證完整流程

1. 登錄處理

<% 
String username = request.getParameter("username");
String password = request.getParameter("password");
if (userService.login(username, password)) {
    session.setAttribute("loginUser", username); // 存入會話
    session.setMaxInactiveInterval(30*60); // 30分鐘超時
    response.sendRedirect("main.jsp");
} else {
    out.println("用戶名或密碼錯誤");
}
%>

2. 權限攔截(Filter/JSP 頂部)

<%
if (session.getAttribute("loginUser") == null) {
    response.sendRedirect("login.jsp?error=未登錄");
    return;
}
%>

3. 安全登出

<%
session.invalidate(); // 徹底銷毀會話
response.sendRedirect("login.jsp");
%>

分布式環境 session 共享方案

  • Sticky Session(會話黏滯)
  • Session Replication(容器級複製)
  • 推薦:Redis/Memcached 集中式存儲(Spring Session 實現)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved