1. 概述
本教程將演示如何在基於 Servlet 的 Web 應用程序中設置 會話超時。
2. 在 web.xml
所有 Http 會話的超時時間可以在 Web 應用程序的 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app ...>
...
<session-config>
<session-timeout>10</session-timeout>
</session-config>
</web-app>請注意,超時時間設置為 分鐘,而不是秒。
有趣的一點是,在 Servlet 3.0 環境中,如果可以使用註解代替 XML 部署描述符,則無法通過編程方式設置全局會話超時。會話超時的編程配置在 Servlet Spec JIRA 上仍存在一個未解決的問題,但該問題尚未安排進行處理。
3. 針對單個會話的程序化超時設置
通過 jakarta.servlet.http.HttpSession 提供的 API,可以程序化地指定 僅針對當前會話 的超時時間。
HttpSession session = request.getSession();
session.setMaxInactiveInterval(10*60);與 <em><session-timeout></em 元素相比,<em>setMaxInactiveInterval</em 方法接受的值是 秒。
4. Tomcat 會話超時
所有 Tomcat 服務器都提供一個默認的 <a title="Default Servlet Configuration for Tomcat 7" href="http://tomcat.apache.org/tomcat-7.0-doc/default-servlet.html" target="_blank" rel="noopener noreferrer">web.xml文件,該文件可以全局配置整個 Web 服務器 – 該文件位於:`
$tomcat_home/conf/web.xml此默認部署描述文件並未配置 <session-timeout> 為 30 分鐘。
單獨部署的應用,如果它們在自己的 web.xml 描述文件中提供了各自的超時值,則優先級高於並 會覆蓋此全局 web.xml 配置。
請注意,Jetty 同樣支持此功能:該文件位於:
$jetty_home/etc/webdefault.xml5. 結論
本教程討論了在 Servlet Java 應用程序中配置 HTTP Session 超時的實用方法。我們還演示瞭如何在 Tomcat 和 Jetty 等 Web 服務器級別設置此選項。
當項目在本地運行時,主頁 HTML 可通過以下地址訪問: