一尘不染

如果用户当前在页面上处于活动状态,如何使用JavaScript / jQuery进行检测?

javascript

我需要检测用户超过30分钟的时间在当前页面上处于非活动状态(未单击或键入)。

我认为最好使用附加到body标签的事件模糊处理,然后继续将计时器重置30分钟,但是我不确定如何创建它。

我有可用的jQuery,尽管我不确定其中有多少将实际使用jQuery。

编辑:
我更需要知道他们是否正在积极使用该站点,因此单击(更改字段或字段在字段中的位置或选择复选框/收音机)或键入(在输入,文本区域等中)。如果他们在另一个选项卡中或使用其他程序,那么我的假设是他们不在使用该站点,因此应注销(出于安全原因)。

编辑#2:
所有人都清楚,这根本不能确定用户是否已登录,是否经过身份验证或其他任何操作。现在,如果用户在30分钟内未发出页面请求,服务器将注销该用户。此功能可以防止某人花费30分钟以上的时间填写表单,然后提交表单只是为了发现自己尚未注销。因此,这将与服务器站点结合使用,以确定用户是否处于非活动状态(不是单击或键入)。基本上,要做的是在闲置25分钟后,将向他们显示一个对话框以输入密码。如果不在5分钟之内,系统将自动注销它们,并注销服务器的会话(下次访问页面时,与大多数站点一样)。

Javascript仅用作对用户的警告。如果禁用了JavaScript,则他们将不会收到警告,并且(以及大多数网站无法正常工作)它们将在下次请求新页面时注销。


阅读 459

收藏
2020-05-01

共2个答案

一尘不染

您可以观看鼠标的移动,但这是您将获得最好的指示,以表明用户仍在那儿而无需听click事件。但是,javascript无法判断它是活动选项卡还是浏览器处于打开状态。(好吧,您可以获取浏览器的宽度和高度,并告诉您浏览器是否已最小化)

2020-05-01
一尘不染

这就是我想出的。它似乎可以在大多数浏览器中使用,但是我想确保它可以一直在任何地方使用:

var timeoutTime = 1800000;
var timeoutTimer = setTimeout(ShowTimeOutWarning, timeoutTime);
$(document).ready(function() {
    $('body').bind('mousedown keydown', function(event) {
        clearTimeout(timeoutTimer);
        timeoutTimer = setTimeout(ShowTimeOutWarning, timeoutTime);
    });
});
2020-05-11