已调度的无效
您可以设置特定的时间让会话管理工具扫描分布式环境中的失效会话,而不是依赖于以基于会话超时参数的时间间隔运行的定期无效计时器。
当使用分布式会话时,该功能具有以下好处:
- 您可在低应用程序服务器活动的时候调度扫描失效的会话,以避免数据库的失效扫描或另一个 WebSphere®Application Server 实例和到服务 HTTP 会话请求的读/写操作之间的争用。
- 当与“服务方法的结束写”方式一起运行时发生非常少的外部写操作,因为服务器的最后访问时间不需要写出每个 HTTP 请求。(“手动更新”选项和“基于时间的写”选项已经使最近访问写的时间最小化了。)
- 会话管理器仅在安排的时间使会话无效,因此,如果在使会话无效之前请求会话,那么会话仍然可供应用程序使用。以下是使用注意事项:
- 对于配置好的已调度失效,HttpSession 超时并未严格地实现。相反,所有失效处理是在配置的失效时间内处理的。
- 除非明确地调用 HttpSession.invalidate 方法,否则 HttpSessionBindingListener 处理是在配置的无效时间内处理的。
- HttpSession.invalidate 方法立即从会话高速缓存和外部存储使会话失效。
- 定期无效线程仍然与已调度无效一起运行。如果一天中的当前小时与已配置的小时之一不匹配,超出无效时间间隔的会话从高速缓存中移除,但是不从外部存储中移除。该会话的另一个请求导致该会话返回到高速缓存中。
- 当定期无效线程在已配置小时之一期间运行,那么超出失效时间间隔的所有会话都失效,从高速缓存和外部存储中移除。
- 定期无效线程在一小时内可多次运行,而且无须正好在整点运行。
- 如果您使用 HttpSessionReaperPollInterval 定制属性为定期无效线程指定时间间隔,不要指定大于 3600 秒(1 小时)的值,以确保每小时内失效过程至少发生一次。