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

JSP Session 完整指南:原理、API 與跨頁面數據共享實戰

     編輯:.NET 實例教學

Session 機制原理

HTTP 協議無狀態特性導致無法在請求間保持用戶狀態。JSP 通過 HttpSession 實現會話管理,其底層基於 Cookie 或 URL 重寫:

  • 服務端存儲會話數據,生成唯一 Session ID
  • 客戶端瀏覽器保存 Session ID(優先用 Cookie,不支援則自動降級為 URL 重寫)
  • 後續請求攜帶 Session ID,服務端恢復會話上下文

核心配置與生命週期

  • 默認超時:30 分鐘無操作自動失效(可在 web.xml 配置 <session-timeout>)
  • 數據類型限制:只能存儲 Java 對象(如 Integer、String),不能存基本類型(int、double)

HttpSession 常用 API

方法說明
getId()獲取唯一會話標識,用於日誌追蹤或分佈式會話同步
getCreationTime()會話創建時間(毫秒級),可傳給 Date 構造函數格式化顯示
getLastAccessedTime()最後訪問時間,用於判斷用戶活躍度
getMaxInactiveInterval()獲取超時秒數,負值表示永不過期
getAttribute(name)獲取屬性值(JSP 1.0 為 getValue),需強制轉型
setAttribute(name, value)設置屬性(JSP 1.0 為 putValue),自動覆蓋同名舊值
removeAttribute(name)移除指定屬性
invalidate()銷毀會話,清除所有數據

跨頁面數據共享實戰

test1.jsp - 寫入 Session

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<body>
<%
    session.setAttribute("username", "張三");
    session.setAttribute("loginTime", new java.util.Date());
    out.println("Session 數據已寫入,<a href='test2.jsp'>跳轉讀取</a>");
%>
</body>
</html>

test2.jsp - 讀取 Session

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<body>
<%
    String username = (String) session.getAttribute("username");
    Date loginTime = (Date) session.getAttribute("loginTime");
    
    if (username != null) {
        out.println("歡迎:" + username + "<br>");
        out.println("登入時間:" + loginTime + "<br>");
        out.println("Session ID:" + session.getId());
    } else {
        out.println("Session 已失效或未登入");
    }
%>
</body>
</html>

進階應用技巧

  • 登入驗證過濾器:攔截器檢查 session.getAttribute("user") 實現權限控制
  • 購物車實現:以 Map<Integer, CartItem> 存儲商品信息
  • 分佈式 Session:集群環境下配合 Redis/Memcached 實現會話共享
  • 防止 Session Fixation:登入成功後調用 session.invalidate() 再創建新會話
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved