【问题标题】:setMaxInactiveInterval on OC4J isn't accurateOC4J 上的 setMaxInactiveInterval 不准确
【发布时间】:2012-01-24 10:52:43
【问题描述】:

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

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

session.setMaxInactiveInterval(1 * 60);

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

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

【问题讨论】:

    标签: servlets session-timeout oc4j


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      相关资源
      最近更新 更多