java - 在客户端处理 session 超时

标签 java javascript session-timeout sessiontracking

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

  1. 按照说明使用 javascript 超时功能 here .
  2. 使用Server Push使用 WebSockets这当然需要 HTML5 支持。

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

最佳答案

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

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

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

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

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

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

关于java - 在客户端处理 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9993465/

相关文章:

java - Tomcat session 超时 web.xml

session - 保持 session 状态

django - "Refresh"Django session 变量以避免 session 超时?

java - MultiAutoCompleteTextView 自动将之前输入的字符添加到下一个选择中

java - "if"语句与 OO 设计

java - Java 中的异常类组织

javascript - 在 HTML 属性中添加引号

javascript - 当我需要为每个元素使用不同的 id 时,如何通过仅加载一次来多次使用相同的图像

c# - 限制文本框中的整数范围

java - Selenium (Java): hover over a button and click on either of the options