我们可以在春季会话超时之前放入条件吗?

时间:2016-12-24 14:10:56

标签: java spring spring-mvc spring-security session-management

我已经定义了以下处理用户会话的规则。

  • 当用户登录HttpSessionListener的sessioncreate()时,将在数据库中将用户状态设置为在线。
  • 当用户注销时,将调用HttpSessionListener的sessiondestroy()并在数据库中将用户状态设置为脱机..
  • 当用户关闭浏览器/选项卡时,在浏览器卸载/ some_other事件上进行AJAX调用以销毁会话。
  • 由于我们不能完全依赖浏览器事件,所以也要在服务器端使用session_timeout。在会话超时事件中,首先从服务器到客户端进行验证调用,并确认他/她是否仍然可用。如果收到客户的确认,则表示浏览器选项卡仍处于打开状态。所以我们不会破坏会议。

这里在最后一条规则中,如何拦截Spring的会话破坏机制? 如果从客户收到确认,如何跳过会话销毁?

谢谢,

1 个答案:

答案 0 :(得分:0)

不要在捕获会话超时事件后从服务器重新激活会话,让我建议一个更好的方法。

由于您希望只要浏览器处于打开状态就保持会话处于活动状态,即使用户没有访问(交互)该站点,也可以从页面向服务器发送Ajax ping。

这个答案就是一个例子 - https://stackoverflow.com/a/3877867/6352160

这将解决这两个问题 - 当用户关闭浏览器选项卡时自动关闭会话。只要选项卡处于打开状态,就保持会话处于活动状我仍然建议您将Session变量保留为计数器,并允许会话仅在固定的时间限制内打开,以避免不必要的长时间运行会话。