【发布时间】:2009-12-16 14:44:20
【问题描述】:
java servlet/jsp 有没有办法确定网络服务器的会话超时(以秒、分钟等为单位)?我尝试查看 HttpSession 和 System API,但没有看到任何用于确定网络服务器会话超时的属性。我知道这个值是在 web.xml 中设置的,但是我正在设计一个需要通过代码来确定的 java 库。
注意:我正在为通用网络服务器设计,不能依赖供应商特定的扩展。
【问题讨论】:
java servlet/jsp 有没有办法确定网络服务器的会话超时(以秒、分钟等为单位)?我尝试查看 HttpSession 和 System API,但没有看到任何用于确定网络服务器会话超时的属性。我知道这个值是在 web.xml 中设置的,但是我正在设计一个需要通过代码来确定的 java 库。
注意:我正在为通用网络服务器设计,不能依赖供应商特定的扩展。
【问题讨论】:
HttpSession.getMaxInactiveInterval 提供此值
int getMaxInactiveInterval()
返回 servlet 容器在客户端访问之间保持此会话打开的最大时间间隔(以秒为单位)。后 在这个时间间隔内,servlet 容器将使会话无效。这 可以使用 setMaxInactiveInterval 设置最大时间间隔 方法。
返回值为零或更小表示会话永远不会超时。
返回: 一个整数,指定此会话在客户端请求之间保持打开的秒数
【讨论】:
在 Servlet 中使用:
int timeoutInSeconds = request.getSession().getMaxInactiveInterval();
在 JSP 中使用:
<p>Timeout in seconds: ${pageContext.session.maxInactiveInterval}</p>
【讨论】:
会话的超时由空闲时间决定,因此无法知道它何时会超时。
但是,假设会话未被访问,您可以计算下一个可能的超时,
Date expiry = new Date(session.getLastAccessedTime() + session.getMaxInactiveInterval()*1000);
【讨论】:
这是获取超时值的代码:
<%= session.getMaxInactiveInterval() %>
【讨论】:
您可以在会话对象上调用getMaxInactiveInterval。
【讨论】: