现在,我被告知这将在使用的第15分钟终止会话(或者是所有会话?),无论其活动如何。
这是错误的。只有当相关客户端(Web浏览器)超过15分钟没有访问网站时,它才会终止会话。活动肯定会计算,正如您最初预期并尝试解决此问题一样。
顺便说一下,
HttpSession#setMaxInactiveInterval()
在这里并没有改变太多。它与
web.xml
中的
<session-timeout>
完全相同,唯一的区别是您可以在运行时通过编程方式更改/设置它。顺便说一下,更改仅影响当前会话实例,而不是全局范围(否则它将成为静态方法)。
如果想要亲身尝试和体验这个功能,可以将<session-timeout>
设置为1分钟,并创建以下的HttpSessionListener
:
@WebListener
public 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());
}
}
Great, I am here to help! What language do you need the text translated from and to?
<listener>
<listener-class>com.example.HttpSessionChecker</listener-class>
</listener>
请注意,Servlet容器不会在超时时间
正好后立即销毁会话。这是一个后台作业,以一定的间隔运行(例如,根据负载和Servlet容器的制造/类型为5〜15分钟)。因此,在确切的一分钟内没有活动后,如果您在控制台中没有看到
destroyed
行,请不要感到惊讶。但是,当您在已超时但尚未销毁的会话上触发HTTP请求时,它将立即被销毁。
另请参见: