如何使 WebLogic 会话超时更加一致

How to make WebLogic Session Timeout More Consistent

我使用的是 WebLogic 12c,并且必须实现一个在浏览器关闭时终止会话的功能。我有一个来自客户端的 "heartbeat",它每隔设定的秒数进行一次网络调用。 Weblogic 配置为在 3 次心跳丢失后会话超时。这在大多数情况下都非常有效。除非您正在查看日志。

所以我发现的一些有趣的事情是 WebLogic 实际上并没有在指定的超时时间将会话超时。我有一个会话侦听器来记录用户实际注销的时间并处理其他一些注销功能。我观察到的是那些日志消息并没有恰好在那个超时时间发生。相反,WebLogic 似乎 "randomly" 决定何时清除死会话。好处是,如果客户端尝试使用相同的凭据重新连接,WebLogic 将看到会话已超时并触发注销功能。不幸的是,这真的对我不起作用。在 WebLogic 决定清除死会话之前,至少我需要一些 "Maximum time"。

我觉得这个问题和Java中的垃圾收集类似。每当感觉要发生时,它就会发生。

所以,简而言之,我的问题是:有没有一种方法可以在 WebLogic 中确定会话清除线程的优先级,或者是否有一种方法可以将 WebLogic 配置为每隔 X 秒触发一次会话清除线程?

WebLogic 使用名为 "invalidation-interval-secs" 的第二个参数来配置何时真正清除 http 会话对象。文档说:

Sets the time, in seconds, that WebLogic Server waits between doing house-cleaning checks for timed-out and invalid sessions, and deleting the old sessions and freeing up memory. Use this element to tune WebLogic Server for best performance on high traffic sites. The default value is 60 seconds.

https://docs.oracle.com/cd/E11035_01/wls100/webapp/weblogic_xml.html