我会在客户端处理这个。创建一个对象来封装功能。
就像是:
var UserInactivityMonitor = UserInactivityMonitor || {};
UserInactivityMonitor = (function (module) {
var inactivityIndex;
var promptIndex;
var timer;
module.startInactivityMonitor = function () {
module.timerTick();
};
module.timerTick = function () {
inactivityIndex--;
if (inactivityIndex === 0) {
module.fireInactivityAlert();
}
if (inactivityIndex === promptIndex) {
module.fireIdlePrompt();
}
timer = setTimeout(module.timerTick, 1000);
};
module.fireIdlePrompt = function () {
var response = confirm('are you stil there?');
if (response === true) {
module.resetInactivityIndex();
}
};
module.resetInactivityIndex = function () {
inactivityIndex = 15;
promptIndex = 5;
};
module.fireInactivityAlert = function () {
alert('Inactivity alert!');
};
module.initialize = function () {
module.resetInactivityIndex();
module.startInactivityMonitor();
};
return module;
})(UserInactivityMonitor || {});
将 inactivityIndex 设置为在不活动事件触发之前将经过的秒数。将 promptIndex 设置为当用户仍然存在时将被提示的剩余秒数。上面的代码将不活动超时设置为 15 秒,并且将在剩余 5 秒标记处调用空闲提示。
在页面加载时启动不活动计时器:
$(function () {
UserInactivityMonitor.initialize();
});
在任何 AJAX 请求上,重置计数器:
$("#fooButton").on('click', function () {
$.ajax(
{
url: $("#buttonClickPostUrl").val(),
data: {
someData: 'data'
},
type: 'POST',
complete: function () {
UserInactivityMonitor.resetInactivityIndex();
}
});
});
如果服务器正在维护会话状态,那么您将需要向服务器发出请求以终止会话,并可选择将浏览器定向到事件的相应页面。您可以在 fireInactivityAlert() 函数中执行此操作。