我在 oc4j 中部署了一个 servlet 应用程序。
我试图在1
一分钟后使用户会话无效:
session.setMaxInactiveInterval(1 * 60);
但是发生的情况是会话被破坏之前需要超过 1 分钟(并且可能达到 1 分半钟)。
这是一个实施问题,还是什么?
我在 oc4j 中部署了一个 servlet 应用程序。
我试图在1
一分钟后使用户会话无效:
session.setMaxInactiveInterval(1 * 60);
但是发生的情况是会话被破坏之前需要超过 1 分钟(并且可能达到 1 分半钟)。
这是一个实施问题,还是什么?
您似乎是通过等待直到HttpSessionListener#sessionDestoryed()
被调用而不是在恰好 1 分钟后实际向服务器发送 HTTP 请求来检查销毁。
会话销毁位于由后台作业管理的大多数服务器上,该作业间隔运行,可能每分钟或更长时间,具体取决于服务器制造/版本、配置以及可能的负载。此作业检查所有打开的会话是否已过期,并相应地清除过期的会话。因此,只要客户端没有发送请求,就不会在会话过期的同一秒立即调用会话销毁。此后台作业并非每秒运行一次,它会占用过多的 CPU。
然而,只要服务器检索到带有会话 ID 的请求,而会话仍然存在于服务器的内存中但已过期,会话销毁将立即被调用。
所以,你要么接受它,要么改变你的测试方法。