Java 我们可以在春季会话超时之前设置条件吗?

Java 我们可以在春季会话超时之前设置条件吗?,java,spring,spring-mvc,spring-security,session-management,Java,Spring,Spring Mvc,Spring Security,Session Management,我定义了以下处理用户会话的规则 当用户登录HttpSessionListener的sessioncreate()时,将调用该函数并在数据库中将用户状态设置为online 当用户注销时,将调用HttpSessionListener的sessiondestroy(),并在数据库中将用户状态设置为脱机 当用户关闭浏览器/选项卡时,在浏览器卸载/其他事件上进行AJAX调用以销毁会话 因为我们不能完全依赖浏览器事件,所以也可以在服务器端使用会话超时。在会话超时事件中,首先从服务器向客户端进行验证调用,并

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

  • 当用户登录HttpSessionListener的sessioncreate()时,将调用该函数并在数据库中将用户状态设置为online
  • 当用户注销时,将调用HttpSessionListener的sessiondestroy(),并在数据库中将用户状态设置为脱机
  • 当用户关闭浏览器/选项卡时,在浏览器卸载/其他事件上进行AJAX调用以销毁会话
  • 因为我们不能完全依赖浏览器事件,所以也可以在服务器端使用会话超时。在会话超时事件中,首先从服务器向客户端进行验证调用,并确认他/她是否仍然可用。若收到来自客户端的确认,则表示浏览器选项卡仍处于打开状态。因此,我们不会破坏会话
在最后一条规则中,如何拦截spring的会话破坏机制? 如果从客户端收到确认,如何跳过会话销毁


谢谢,

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

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

这个答案就是一个例子:


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

只是澄清一下,您是否希望在浏览器打开时保持会话处于活动状态?即使用户没有在屏幕上执行任何任务?是会话也应处于活动状态。我有一个要求,用户将随机选择。因此,在那之前,他将等待。因为您已经在浏览器卸载事件上发送了一些事件,所以只要ajax请求带有一些参数(如action='logout',您就可以在服务器端通过使会话失效来执行注销,并且作为更安全的一方,您可以通过设置会话来设置最大非活动超时。setMaxInactiveInterval(15*60)//UnsecondShere我不使用任何定期从客户端到服务器发送的ack。这将消耗一些流量。相反,我希望用户服务器到客户机请求了解客户机的状态。若收到客户的回复,那个么即使并没有任何活动,客户仍然是开放的。除了注销/浏览器关闭外,我不想终止会话。谢谢,但我不想将ajax ping从浏览器发送到服务器。这将为使用网站的客户的LAC消耗大量带宽。取而代之的是,我选择了向客户确认他是否还在网站上,并请求确认。我可以在这里找到部分答案。有人可以扩展它以防止会话破坏吗?忘记提供链接: