2016-12-24 75 views
-1

我已经定义了处理用户会话的以下规则。我们可以在春季的会话超时之前添加条件吗?

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

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

感谢,

+0

只是为了澄清一下,只要浏览器处于打开状态,是否要保持活动状态?即使用户没有在屏幕上执行任何操作? –

+0

是会话应该是活动的。我有一个要求,随机选择用户。所以在那之前他会等着。 –

+0

正如你已经发送浏览器的卸载事件的一些事件,其罚款尽快通过Ajax请求自带了采取行动的一些参数无效会话=“注销”执行服务器端注销和安全方面,你可以设置最大不活动超时由设置session.setMaxInactiveInterval(15 * 60); // inseconds –

回答

0

而是捕捉会话超时事件后重新激活,从服务器的会议,让我提出一个更好的办法。

由于要保持会话活动状态,只要在浏览器打开时,即使用户没有访问(交互)与网站,从页面发送一个Ajax回ping服务器。

这个答案就是一个很好的例子 - 自动关闭会话当用户关闭浏览器选项卡 - https://stackoverflow.com/a/3877867/6352160

这将解决这两个问题。只要选项卡打开,请保持活动状态。我仍然建议你保持一个Session变量作为计数器,并允许会话只在固定的时间限制内打开,以避免不必要的长时间运行会话。

+0

谢谢,但我不想发送从浏览器到服务器的Ajax平。这会为使用网站的客户带来大量的带宽。相反,我选择通过客户确认他是否仍在网站上寻求确认。 –

+0

我能在这里找到我的答案的一部分。有人可以扩展它来防止会话被破坏吗? –

+0

忘记给链接:http://stackoverflow.com/questions/3943368/invoke-method-just-before-session-expires –

相关问题