处理客户端的会话超时

时间:2012-04-03 12:39:40

标签: java javascript session-timeout sessiontracking

场景是用户在她的会话即将到期时应该收到通知(例如通过典型的JS警报或重定向等)。可以做的几种方法是

  1. 使用javascript超时功能,如here所述。
  2. 使用Server Push使用WebSockets当然需要HTML5支持。
  3. 这两种方法的相对优点/缺点是什么?除了这些,还有其他方法可以实现(一些标准库等)。我的后端是Java EE(Struts + Spring)。

2 个答案:

答案 0 :(得分:8)

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

如果使用websockets使用服务器推送,您可能无法定位不是最新浏览器的用户。您可能必须使用一些信令框架甚至更改后端堆栈。 (我现在可以想到socket.io& SignalR)

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

<强>更新 这是我能想到的另一种方法。

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

这再次不会优雅地降级并依赖于客户端计算机的时间。因此,如果错误,此功能将无法可靠地运行。

答案 1 :(得分:2)

如何创建一个过滤器,在其中设置一个cookie,其中包含超时之前剩余的秒数?

因此,您将始终将该值设置为(session-config-&gt; session-timeout)* 60.

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