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

Servlet Session 完整指南:生命週期、鈍化活化、跨語言對比與實戰代碼

     編輯:Java 綜合教學

Servlet Session 完整指南:生命週期、鈍化活化、跨語言對比與實戰代碼

Session 是 Web 應用中維持用戶會話狀態的核心機制。本文詳細解析 Session 的作用域、生命週期、創建與銷毀條件、鈍化/活化機制,並提供 Java 與 PHP 兩種語言的對比代碼。

一、Session 核心特性

屬性說明
作用域當前會話範圍(瀏覽器關閉或超時失效)
生命週期首次調用 request.getSession() 創建 → 30 分鐘無操作超時(可在 web.xml 配置) → 銷毀
銷毀觸發1) session.invalidate() 主動銷毀 2) 超時自動銷毀 3) 伺服器非正常關閉

二、核心 API 操作

// 1. 獲取 Session(若不存在則創建)
HttpSession session = request.getSession();  // 等同 getSession(true)
HttpSession session = request.getSession(false);  // 不創建,無則返回 null

// 2. 存儲屬性
session.setAttribute("name", "taoshihan");  // key: String, value: Object

// 3. 讀取屬性
Object name = session.getAttribute("name");  // 需強制轉型

// 4. 移除屬性
session.removeAttribute("name");

// 5. 獲取 Session ID
String jsessionid = session.getId();

三、鈍化與活化機制

當伺服器正常關閉時,未超時的 Session 會序列化到磁碟(Tomcat 預設 work/Catalina/localhost//SESSIONS.ser),此過程稱為鈍化;伺服器重啟時反序列化恢復到內存,稱為活化。

前提:存入 Session 的對象必須實現 java.io.Serializable 介面,否則鈍化失敗拋出 NotSerializableException。

四、Java vs PHP Session 代碼對比

操作Java (Servlet)PHP
啟動/獲取HttpSession session = request.getSession();session_start();
寫入session.setAttribute("name", "value");$_SESSION['name'] = "value";
讀取session.getAttribute("name");$_SESSION['name'];
銷毀session.invalidate();session_destroy();

五、web.xml 配置超時時間

<web-app>
    <session-config>
        <session-timeout>30</session-timeout>  <!-- 單位:分鐘 -->
    </session-config>
</web-app>

六、常見坑點提醒

  • getSession() 會觸發創建,若僅檢查是否存在請用 getSession(false)。
  • Session 依賴 Cookie(JSESSIONID),若客戶端禁用 Cookie 需啟用 URL 重寫(response.encodeURL())。
  • 集群環境下需配置 Session 複製或共享存儲,否則單點故障導致 Session 丟失。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved