场景是用户在她的会话即将到期时应该收到通知(例如通过典型的JS警报或重定向等)。可以做的几种方法是
这两种方法的相对优点/缺点是什么?除了这些,还有其他方法可以实现(一些标准库等)。我的后端是Java EE(Struts + Spring)。
答案 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值,这样您就不依赖于时间配置。