处理客户端的会话超时

San*_*osh 9 javascript java sessiontracking session-timeout

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

  1. 使用JavaScript超时功能解释在这里.
  2. 使用服务器推送使用的WebSockets其关闭过程将需要HTML5的支持.

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

Ram*_*esh 8

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

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

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

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

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

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