我正在使用的应用程序正在使用jquery实现一些会话超时提示。有一个计时器进行计数,如果在预定义的X分钟后没有用户活动,它会显示用户提示
(您的会话将很快结束…继续或注销)。
它使用的方法在这里找到-http://www.codeproject.com/Articles/227382/Alert-Session-Time-out-in-ASP-Net.
然而,如果用户打开新的选项卡,这将不起作用:
1) 用户登录,计时器开始计数用户的非活动状态。
2) 用户单击在新窗口中打开的某个链接(例如,在我们的案例中,它是一个正在运行的长报告)。第二个选项卡处于活动状态,有一些响应(交叉/回发不会结束会话)。
3) 第二个浏览器选项卡处于活动状态,有一些活动不会结束会话。
4) 然而,第一个浏览器选项卡是非活动的,计数器"认为"会话应该关闭,它会显示相应的消息,然后注销用户。
这不是我们想要的。所以,给定的方法只是一些会话超时修复,但如果用户在另一个选项卡中处于活动状态,那么应用程序无论如何都会注销用户。这不是我们想要的。我们有一个报告页面。它的功能是在新的选项卡/窗口中打开报告。而且它可以运行很长时间。报告部分负责处理一些回调,所以会话不会在这个选项卡中结束。但是,它会在第二个选项卡中终止。
编辑:我有以下解决方案:"存储Javascript cookie并检查它以确定会话是否已在另一个选项卡中扩展?"。我仍在努力理解这一点。
您可以使用LocalStorage概念来节省上次活动时间。
如果你把它保存在其中一个选项卡上,它也可以从其他选项卡访问。。。
所有现代浏览器都支持此功能。
示例:
当检测到活动时,使用:
localStorage['lastActivity'] = new Date();
当你想检查它时:
var lastActityTime = localStorage['lastActivity'];