为Web应用程序实现空闲超时的最佳方法是什么(自动注销)

时间:2013-03-20 22:16:15

标签: javascript jquery asp.net httphandler session-timeout

我想为我们正在构建的Web应用程序实现空闲超时。我之前使用来自codeplex的AsynchronousSessionAuditor实现了这一点,它基本上通过常量轮询来查找formsauthentication和会话cookie超时。

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

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

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

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,那是不可能的,因为javascript中没有触发当前窗口/标签之外的活动的事件。

除非您为每个浏览器添加了一个插件,可以监控浏览器中的所有活动,但这不是一个真正的实用方法。

答案 1 :(得分: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 */}
}

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

尝试: Run setTimeout only when tab is active 要么 How to tell if browser/tab is active

编辑 - >增加:

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