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

Java Web Session 失效時間設定三種方式與監聽器清理機制完整指南

     編輯:Java 相關知識

Session 逾時設定三種方式(優先級由高到低)

  1. 程式碼動態設定(最高優先級)
    session.setMaxInactiveInterval(900); // 秒為單位,900 秒 = 15 分鐘
    可在登入成功後或共用 Filter 中設定。注意:時間由伺服器計算,測試時需調整伺服器時間。
  2. web.xml 部署描述檔設定
    <session-config>
        <session-timeout>1</session-timeout> <!-- 分鐘為單位 -->
    </session-config>
  3. 應用伺服器全域預設值(最低優先級)
    Tomcat:$CATALINA_HOME/conf/web.xml 中的 <session-config>,預設 30 分鐘。修改此處影響所有未覆蓋的 Web 應用。

Session 失效後的業務處理:HttpSessionListener

當 Session 逾時或手動 invalidate() 時,容器會觸發監聽器事件。實作 HttpSessionListener 可執行清理邏輯:

監聽器實作範例

public class SessionListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent event) {
        HttpSession ses = event.getSession();
        String id = ses.getId() + ses.getCreationTime();
        SummerConstant.UserMap.put(id, Boolean.TRUE); // 記錄在線用戶
    }

    public void sessionDestroyed(HttpSessionEvent event) {
        HttpSession ses = event.getSession();
        String id = ses.getId() + ses.getCreationTime();
        synchronized (this) {
            SummerConstant.USERNUM--;              // 在線人數 -1
            SummerConstant.UserMap.remove(id);     // 移除用戶記錄
        }
    }
}

web.xml 註冊監聽器

<listener>
    <listener-class>com.demo.SessionListener</listener-class>
</listener>

常見應用場景

  • 線上人數統計:創建 +1,銷毀 -1,配合同步機制確保準確。
  • 防重複登入:Session 有效期內同帳號再次登入提示「已登入」;Session 失效後允許重新登入。
  • 資源釋放:清理用戶佔用的暫存檔、資料庫連線、快取物件等。

注意事項

  • Session 逾時時間單位:程式碼用秒,web.xml 用分,勿混淆。
  • 叢集環境下需配置 Session 複製或外部儲存(Redis/Database),單機監聽器不適用。
  • sessionDestroyed 執行時 Session 已無效,勿嘗試存取 Session 屬性(會拋出 IllegalStateException)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved