Javascript自动注销代码

Jay*_*eis 10 javascript

我有以下代码,大部分工作,但我想知道是否有可能调整一下.所以下面的代码所做的是,如果它们没有x个毫秒的鼠标活动,则会显示一个弹出窗口,说明它们将被注销,然后当/如果你最终单击ok按钮时,脚本将自动引导你注销文件.

然而,我想要做的是,如果在x毫秒之后没有点击确定按钮,那么继续将屏幕带到logout.php文件.任何人都知道如何使用以下代码执行此操作?谢谢

// Set timeout variables.
var timoutWarning = 840000; // Display warning in 14 Mins.
var timoutNow = 100000; // Timeout in 15 mins would be 900000.
var logoutUrl = 'logout.php'; // URL to logout page.

var warningTimer;
var timeoutTimer;

// Start timers.
function StartTimers() {
    warningTimer = setTimeout("IdleWarning()", timoutWarning);
    timeoutTimer = setTimeout("IdleTimeout()", timoutNow);
}

// Reset timers.
function ResetTimers() {
    clearTimeout(warningTimer);
    clearTimeout(timeoutTimer);
    StartTimers();
    $("#timeout").dialog('close');
}

// Show idle timeout warning dialog.
function IdleWarning() {
//  $("#timeout").dialog({
    //modal: true
    alert("Warning, your page will redirected to login page. Due to not move your mouse within the page in 15 minutes.");
//});
}

// Logout the user.
function IdleTimeout() {
    window.location = logoutUrl;
}
Run Code Online (Sandbox Code Playgroud)

Vto*_*one 16

从概念上讲,您一次只需要运行一个计时器.一个计时器运行14分钟,另一个计时器运行另一分钟(总计15分钟).一旦14分钟计时器用完,将其杀死然后启动1分钟计时器.如果该一分钟计时器用完,请将用户注销.如果用户按下"保持登录状态"按钮,则终止1分钟计时器并重新启动14分钟计时器.冲洗并重复.

我尽我所能改变了你的代码.希望你明白这一点.

// Set timeout variables.
var timoutWarning = 840000; // Display warning in 14 Mins.
var timoutNow = 60000; // Warning has been shown, give the user 1 minute to interact
var logoutUrl = 'logout.php'; // URL to logout page.

var warningTimer;
var timeoutTimer;

// Start warning timer.
function StartWarningTimer() {
    warningTimer = setTimeout("IdleWarning()", timoutWarning);
}

// Reset timers.
function ResetTimeOutTimer() {
    clearTimeout(timeoutTimer);
    StartWarningTimer();
    $("#timeout").dialog('close');
}

// Show idle timeout warning dialog.
function IdleWarning() {
    clearTimeout(warningTimer);
    timeoutTimer = setTimeout("IdleTimeout()", timoutNow);
    $("#timeout").dialog({
        modal: true
    });
    // Add code in the #timeout element to call ResetTimeOutTimer() if
    // the "Stay Logged In" button is clicked
}

// Logout the user.
function IdleTimeout() {
    window.location = logoutUrl;
}
Run Code Online (Sandbox Code Playgroud)

  • 当多个选项卡打开时,这将不起作用。因为 clearTimeout(); 不适用于多个选项卡。 (6认同)

Sau*_*try 7

更新@VtoCorleone 的回答:

var warningTimeout = 840000;
var timoutNow = 60000;
var warningTimerID,timeoutTimerID;

function startTimer() {
    // window.setTimeout returns an Id that can be used to start and stop a timer
    warningTimerID = window.setTimeout(warningInactive, warningTimeout);
}

function warningInactive() {
    window.clearTimeout(warningTimerID);
    timeoutTimerID = window.setTimeout(IdleTimeout, timoutNow);
    $('#modalAutoLogout').modal('show');
}

function resetTimer() {
    window.clearTimeout(timeoutTimerID);
    window.clearTimeout(warningTimerID);
    startTimer();
}

// Logout the user.
function IdleTimeout() {
    document.getElementById('logout-form').submit();
}

function setupTimers () {
    document.addEventListener("mousemove", resetTimer, false);
    document.addEventListener("mousedown", resetTimer, false);
    document.addEventListener("keypress", resetTimer, false);
    document.addEventListener("touchmove", resetTimer, false);
    document.addEventListener("onscroll", resetTimer, false);
    startTimer();
}

$(document).on('click','#btnStayLoggedIn',function(){
    resetTimer();
    $('#modalAutoLogout').modal('hide');
});

$(document).ready(function(){
    setupTimers();
});
Run Code Online (Sandbox Code Playgroud)