2013-03-20 60 views
3

我想为我们正在构建的Web应用程序实现空闲超时。我早先使用codeplex中的AsynchronousSessionAuditor实现了这一点,它实质上是通过持续轮询来查找formsauthentication和session cookie超时。什么是实现Web应用程序空闲超时的最佳方式(自动注销)

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

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

有没有人已经固定jQuery的空闲超时插件已经标签浏览的问题?或者,有没有更好的Web应用程序的应用程序超时方法(通过此网络应用是建立使用asp.net F/W的方式)

回答

2

如果我明白你的问题正确的,这是不可能的,因为没有在当前窗口/选项卡之外的JavaScript中触发的活动。

除非你有一个插件来与您的网站的每个浏览器,它可以监视浏览器的所有活动一起去,但这不是真正的实用方法。

+1

是的你是对的。我不得不最终选择AsynchronousSessionAuditor来解决这个问题,因为跨标签和窗口的客户端事件不能专门处理,而不需要在下面将数据保存到服务器端(由Ryoku指定)。 – Lin 2013-05-20 00:50:53

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 */} 
} 

如果你犯了一个小的搜索,你可以找到这个问题的varaieties已经被提问和回答,你也许可以找到一个解决方案,你可以用你提到的其中一个插件来实现。

尝试: Run setTimeout only when tab is activeHow to tell if browser/tab is active

编辑 - >新增:

或者我会尝试不同的方法。你可以创建一些散列一个cookie并保存散列与更新每当窗口被激活时间戳的DB(你可以检查每5秒什么的,它不是一个密集的要求)
然后,之前做的另一项检查(但在相同的请求中)查看自上次时间戳以来已过去多少时间,并在必要时将其注销。
当时间过去时,它不会将其注销,但当它们尝试通过再次打开或关注选项卡/窗口尝试访问该站点时,它将不会被注销。

相关问题