【发布时间】:2017-01-19 10:09:40
【问题描述】:
我已经构建了一个应用程序,其中我将从服务器接收到的令牌保存到客户端的 sessionStorage 中。会话到期时间为 30 分钟。该应用程序在给定场景下运行良好:
正常工作
- 用户打开应用程序。
- 闲置 30 分钟,然后点击任何链接
- 会话到期消息显示正常。
- 用户关闭窗口并启动新窗口,应用程序加载成功
但是考虑到分配给新窗口的新 sessionStorage(不正确的行为),以下方案无法正常工作:
- 用户打开应用程序。
- 闲置 5-6 小时或过夜
- 用户第二天回来并尝试点击过时的会话
- 浏览器挂断且无响应
- 用户关闭窗口并启动一个新窗口,应用程序显示会话超时页面。用户必须刷新或重新启动页面。
【问题讨论】:
-
通过在列表之前添加一个空行,您可以将其格式化为列表。此外,您还使用了哪些其他技术?你在说什么令牌?如果浏览器在这么长时间后挂起,则很可能还有其他问题。您在这里的实际问题是什么?看起来它工作正常,因为它自然只能在应用程序运行时删除数据。如果数据过期,它可能会读取数据并仅在读取时丢弃它,而不是主动监视 SessionStorage 中的过期内容。
-
是的,应用程序正在运行(实际上它已经部署到我们的 UAT 环境中并且它一直处于运行状态)。我们将从服务器接收到的令牌存储到浏览器 sessionStorage 中(它在每种情况下都运行良好)。但是,如果用户在我的应用程序上的理想状态超过 5-6 小时,并且如果浏览器进入挂起状态,然后用户关闭该浏览器并打开一个新浏览器,则会出现会话过期消息。这意味着存在于先前打开的浏览器上的令牌,由新打开的浏览器共享。
-
这就像 IE 浏览器在挂起并随后打开新浏览器时的默认行为,它将 sessionStorage 传递给另一个,以便用户有机会恢复以前的会话。
-
我仍然不明白您的实际问题/问题是什么?我的假设是你想修复这种行为。您可以通过避免浏览器崩溃和/或主动强制删除该信息来做到这一点。这可以例如通过在 x 分钟后重新加载页面来完成。但如果浏览器在此之前崩溃,则不会修复它。
-
我只想了解: 1. 如果我在 IE 中打开我的应用程序并将某些内容存储到 sessionStorage 中,并且 IE 窗口在某个时间后挂起。 2.然后我关闭它并在新窗口中重新打开它,是否可以在新窗口中使用?