用户会话快过期时,用户应该得到通知(比如通过JS弹出框或重定向等方式)。有几种方法可以实现: 使用JavaScript的超时函数,如此处所述。 使用服务器推送,使用WebSockets,当然需要HTML5支持。 这两种方法的优缺点是什么?除此之外,是否还有其他方法可以实现(如某些标准库等)?我的后端是Java EE(Struts+Spring)。
使用JavaScript超时函数,您需要确保如果用户正在进行任何AJAX调用,则应将该函数重置为其应被视为用户活动。如果使用WebSockets使用服务器推送,则可能无法针对浏览器不是最新的用户。您可能需要使用一些信令框架甚至更改后端堆栈。(目前我可以想到socket.io&SignalR)两种方法都不会优雅地降级。所以,在我看来,JavaScript选项听起来更好,因为它可以瞄准更广泛的受众,并且这将要求您处理一些边缘情况。如果我有选择权,我根本不会实现这个功能。但很少会这样发生。更新: 这是我能想到的另一种方法。每次提供页面时,我都会发送一个Cookie,客户端可以访问其中包含会话超时的UTC时间。在我的代码中,我会放置一个setInterval,它会读取值并将本地时间与UTC进行比较,如果接近,则会显示一个弹出窗口,指示超时将在X秒内发生等等。这也没有优雅地降级,并依赖于客户端机器的时间。因此,如果错误了,此功能将无法可靠地工作。
创建一个筛选器,设置一个cookie,其中包含超时剩余秒数,这个cookie的值始终为(session-config->session-timeout) * 60。在前端,使用setInterval函数,通过将间隔时间减去当前cookie值来更新cookie值,这样您就不会依赖于时间配置。请保留HTML标签。