10

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

  1. 使用此处解释的 javascript 超时功能。
  2. 使用WebSockets使用服务器推送,这当然需要 HTML5 支持。

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

4

2 回答 2

9

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

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

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

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

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

这又不会优雅地降级,而是依赖于客户端机器的时间。因此,如果错误,此功能将无法可靠运行。

于 2012-04-06T08:50:50.463 回答
2

如果创建一个过滤器,您可以在其中设置一个 cookie,其中包含超时前的秒数?

因此,您将始终将该值设置为 (session-config->session-timeout) * 60。

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

于 2016-06-28T15:41:14.923 回答