现在,我被告知这将在使用的第15分钟内终止会话(或所有会话?), 无论其活动如何 。
这是 错的 。当关联的客户端(Web浏览器)超过15分钟未访问网站时,它将终止会话。看到您尝试解决此问题的确切时间,此活动确实与您最初预期的一样。
在
HttpSession#setMaxInactiveInterval()不通过的方式在这里多变化。它不完全一样
<session-timeout>的
web.xml,唯一的区别,你可以改变/运行时编程设定。顺便说一下,更改仅影响当前的会话实例,而不会全局影响(否则将是
static方法)。
要 自己 玩耍并体验 一下 ,请尝试将其设置
<session-timeout>为1分钟并创建
HttpSessionListener如下内容:
@WebListenerpublic class HttpSessionChecker implements HttpSessionListener { public void sessionCreated(HttpSessionEvent event) { System.out.printf("Session ID %s created at %s%n", event.getSession().getId(), new Date()); } public void sessionDestroyed(HttpSessionEvent event) { System.out.printf("Session ID %s destroyed at %s%n", event.getSession().getId(), new Date()); }}(如果您尚未使用Servlet 3.0,因此无法使用@WebListener
,请web.xml
按以下所示进行注册):
<listener> <listener-class>com.example.HttpSessionChecker</listener-class></listener>
请注意,servletcontainer不会在 确切
的超时值之后立即销毁会话。这是一个后台作业,每隔一定的时间间隔运行一次(例如5〜15分钟,具体取决于负载和servlet容器的制造商/类型)。因此,当您
destroyed在一分钟内没有活动后立即在控制台中看不到任何一行时,请不要感到惊讶。但是,当您在超时但尚未销毁的会话上触发HTTP请求时,该请求将立即被销毁。



