在我的screens.js中,我检查用户是否闲置。如果闲置,则将显示弹出扩展弹出窗口。但是问题是在screen.js上方使用的是对所有页面的引用(这是常见的.js )
$('*').bind('mousemove click mouseup mousedown keydown keypress keyup submit change mouseenter scroll resize dblclick', function () {
clearTimeout(idleTimer);
console.log("idleState" + idleState);
idleState = false;
idleTimer = setTimeout(function () {
//console.log("idleTimer:" + idleState);
idleState = true;
console.log("idleState" + idleState);
}, 5000);//60000
});
$("body").trigger("mousemove");
sessionCheckInterval = setInterval(showSessionExpireModal, 5000);//60000
以上一种检查用户是否空闲。
之后,我设置了检查用户空闲状态和会话时间的间隔。如果用户空闲并且会话时间等于会话过期,则会话扩展弹出窗口显示。
让我们设想一下。 如果用户在X页面上打开X页面和Y页面,则用户执行某些活动意味着用户未处于空闲状态。但是在Y页面上,用户将不会执行任何活动,这意味着用户处于空闲状态。由于存在Y页面,因此会显示“会话扩展”弹出窗口,这是我不需要的,因为用户正在X页面上执行活动。
sessionCheckInterval = setInterval(showSessionExpireModal, 5000);//interval for session pop up
功能代码在这里。...
function showSessionExpireModal() {
currentSystemTime = new Date(moment(new Date()).format('MM/DD/YYYY HH:mm:ss'));
if (!idleState) return;
console.log("idleState:" + idleState + " currentSystemTime: " + currentSystemTime + " sessionExpiredTime: " + sessionExpiredTime);
if ((idleState) && moment(currentSystemTime).format('MM/DD/YYYY HH:mm:ss') == moment(sessionExpiredTime).format('MM/DD/YYYY HH:mm:ss')) {
$('#SessionExpireModal').foundation('reveal', 'open');
currentSystemTime = new Date(moment(new Date()).format('MM/DD/YYYY HH:mm:ss'));
sessionExpiredTime = new Date(moment(moment(new Date(currentSystemTime)).add(1, 'm').toDate()).format('MM/DD/YYYY HH:mm:ss'));
countDownInterval = setInterval(function () {
counter = counter - duration;
if (counter == 0) {
$('#SessionExpireModal').foundation('reveal', 'close');
clearTimeout(countDownInterval);
counter = 60;
clearTimeout(sessionCheckInterval);
window.location.href = '/User/SessionExpired';
}
$('#countDownTimer').text(counter);
}, 1000);
}
}
如果用户在一个屏幕上执行活动与其他屏幕上进行活动相比,是否可以防止模式弹出。任何建议
答案 0 :(得分:1)
我认为您无法使用JavaScript解决此问题。
您应该通过服务器会话处理来控制“用户”活动。例如。通过AJAX向服务器发送“我是现场信号”。将上次活动时间保存在会话变量中,并通过AJAX在间隔内询问上次活动时间,分别询问现在与上次活动之间的时间差。根据差异,您可以在每个打开的页面上显示一个PopUp。
具有基于WebSocket的会话的解决方案会稍微复杂一些。