3

我想为我们正在构建的 Web 应用程序实现空闲超时。我之前使用 来自 codeplex 的AsynchronousSessionAuditor实现了这一点,它本质上是通过持续轮询来查找表单身份验证和会话 cookie 超时。

但它有一个不尊重客户端事件的缺点,它只会寻找最后一次回发来决定何时注销。

来自 erichynds的 jquery 插件 jquery-idle-timeout-plugin解决了客户端事件的这个问题,但存在无法识别用户在其他选项卡上处于活动状态的另一个缺点。

是否有人已经使用 jquery-idle-timeout-plugin 修复了 TABBED 浏览问题?或者对于 Web 应用程序是否有更好的应用程序超时方法(通过使用 asp.net f/w 构建这个 Web 应用程序的方式)

4

2 回答 2

2

如果我正确理解您的问题,那是不可能的,因为在 javascript 中没有为当前窗口/选项卡之外的活动触发事件。

除非您为每个浏览器都有一个与您的网站一起使用的插件,它可以监控浏览器中的所有活动,但这并不是一个真正实用的方法。

于 2013-03-20T22:21:02.937 回答
0

好吧,您必须手动编写代码,这并不难。你可以使用 onfocus 和 onblur 函数来做这样的事情:

$(function() {
    window.isActive = true;
    $(window).focus(function() { this.isActive = true; });
    $(window).blur(function() { this.isActive = false; });
    showIsActive();
});

function showIsActive()
{
    console.log(window.isActive)
    window.setTimeout("showIsActive()", 2000);
}

function doWork()
{
    if (!window.isActive) { /* Check for idle time */}
}

如果您进行一些搜索,您会发现已经提出并回答了这个问题的各种问题,您可能会找到可以使用您提到的插件之一实现的解决方案。

尝试: 仅在选项卡处于活动状态时运行 setTimeout如何判断浏览器/选项卡是否处于活动状态

编辑 - >添加:

或者我会尝试不同的方法。您可以创建一个带有一些哈希值的 cookie,并将该哈希值保存在您的数据库中,并在窗口处于活动状态时更新时间戳(您可以每 5 秒或其他时间检查一次,这不是一个密集的请求)
然后,在之前进行另一次检查(但在相同的请求)查看自上次时间戳以来已经过去了多少时间,并在必要时将其注销。
当时间过去时,它不会立即将它们注销,但是当他们尝试通过再次打开该站点或通过关注选项卡/窗口来访问该站点时,它会注销。

于 2013-03-20T22:29:30.127 回答