正在处理客户端的会话超时



场景是,当用户的会话即将到期时,用户应该收到通知(比如通过典型的JS警报或重定向等)。有几种方法可以做到这一点,那就是

  1. 使用这里解释的javascript超时函数
  2. 使用服务器推送使用WebSockets,当然需要HTML5支持

这两种方法的相对优点/缺点是什么?除此之外,还有其他方法可以实现(一些标准库等)。我的后端是JavaEE(Struts+Spring)。

通过使用javascript超时函数,您需要确保如果用户正在进行任何AJAX调用,则应重置您的函数,因为它应被视为用户活动。

如果使用服务器推送使用websockets,您可能无法使用不那么新的浏览器瞄准用户。您可能需要使用一些信号框架,甚至更改后端堆栈。(我现在能想到socket.io&SignalR)

这两种方法都不会优雅地退化。因此,IMO javascript选项听起来更好,因为它可以针对更广泛的受众,这将需要您解决一些边缘情况。如果我有选择的话,我根本不会实现这个功能。但这种情况几乎不会发生。

更新:这是我能想到的另一种方法。

每次提供页面时,我都会发送一个Cookie,该Cookie可以在客户端访问,其中包含会话超时的UTC时间。在我的代码中,我会放置一个setInterval,它会读取值并将本地时间与UTC进行比较,如果它关闭,会显示一个弹出窗口,说超时将在X秒内发生。

这同样不会正常降级,并且依赖于客户端机器的时间。因此,如果它是错误的,这个功能将不会可靠地工作。

创建一个过滤器,在该过滤器中设置一个cookie,该cookie的超时时间为秒?

因此,您将始终将该值设置为(会话配置->会话超时)*60。

在前端,使用setInterval,可以通过将时间间隔减去当前cookie值来更新cookie值,这样就不依赖于时间配置。

最新更新