如果用户处于活动状态,则禁用所有窗口的扩展会话弹出窗口

时间:2018-11-03 06:50:07

标签: jquery

在我的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);
    }
}

如果用户在一个屏幕上执行活动与其他屏幕上进行活动相比,是否可以防止模式弹出。任何建议

1 个答案:

答案 0 :(得分:1)

我认为您无法使用JavaScript解决此问题。

您应该通过服务器会话处理来控制“用户”活动。例如。通过AJAX向服务器发送“我是现场信号”。将上次活动时间保存在会话变量中,并通过AJAX在间隔内询问上次活动时间,分别询问现在与上次活动之间的时间差。根据差异,您可以在每个打开的页面上显示一个PopUp。

具有基于WebSocket的会话的解决方案会稍微复杂一些。