1

我在 oc4j 中部署了一个 servlet 应用程序。

我试图在1一分钟后使用户会话无效:

session.setMaxInactiveInterval(1 * 60);

但是发生的情况是会话被破坏之前需要超过 1 分钟(并且可能达到 1 分半钟)。

这是一个实施问题,还是什么?

4

1 回答 1

1

您似乎是通过等待直到HttpSessionListener#sessionDestoryed()被调用而不是在恰好 1 分钟后实际向服务器发送 HTTP 请求来检查销毁。

会话销毁位于由后台作业管理的大多数服务器上,该作业间隔运行,可能每分钟或更长时间,具体取决于服务器制造/版本、配置以及可能的负载。此作业检查所有打开的会话是否已过期,并相应地清除过期的会话。因此,只要客户端没有发送请求,就不会在会话过期的同一秒立即调用会话销毁。此后台作业并非每秒运行一次,它会占用过多的 CPU。

然而,只要服务器检索到带有会话 ID 的请求,而会话仍然存在于服务器的内存中但已过期,会话销毁将立即被调用。

所以,你要么接受它,要么改变你的测试方法。

于 2012-01-24T11:35:07.727 回答