1

我正在使用的应用程序正在使用 jquery 实现一些会话超时提示。有一个计时器,如果在预定义的 X 分钟后没有用户活动,它会显示用户提示

(您的会话将很快结束...继续或注销)。

它使用此处找到的方法 - http://www.codeproject.com/Articles/227382/Alert-Session-Time-out-in-ASP-Net

但是,如果用户打开新选项卡,这将不起作用:

1)用户登录,计时器开始计算用户不活动的次数。

2) 用户点击在新窗口中打开的一些链接(例如,在我们的例子中,它是一个长报告运行)。第二个选项卡处于活动状态,有一些响应(没有结束会话的交叉/回发)。

3) 第二个浏览器选项卡处于活动状态,有一些活动不会结束会话。

4)但是,第一个浏览器选项卡处于非活动状态,计数器“认为”应该关闭会话,它显示适当的消息,然后注销用户。

这不是我们想要的。所以给定的方法只是一些会话超时修复,但如果用户在另一个选项卡中处于活动状态,那么应用程序无论如何都会注销用户。那不是我们想要的。我们有一个报告页面。它的功能是在新选项卡/窗口中打开报告。它可以运行很长时间。报告部分负责一些回调,因此会话不会在此选项卡中结束。但是,它将在第二个选项卡中结束。

编辑: 我有以下解决方案:“存储一个 Javascript cookie 并检查以确定会话是否已在另一个选项卡中扩展?”。我仍在努力理解这一点。

4

1 回答 1

2

您可以使用LocalStorage概念,来保存上次活动时间。

如果您将其保存在其中一个选项卡上,则也可以从其他选项卡访问它...

所有现代浏览器都支持这一点。

例子:

当检测到活动时,请使用:

localStorage['lastActivity'] = new Date();

当你想检查它时:

var lastActityTime = localStorage['lastActivity'];

于 2012-12-13T11:26:31.983 回答