localStorage на javascript ведет обновление

Я пытаюсь отключить пользователя в режиме ожидания, используя javascript на вкладках, приведенный ниже код отлично работает для одной вкладки, для нескольких вкладок он не работает должным образом.

Например: я установил 10 секунд в качестве времени простоя и оставил первую вкладку, она выбрасывает пользователя на 10 секунд, предположим, что я открыл первую вкладку в 00:00:05 часов и открыл вторую вкладку в 00:00:10 часов и работает над второй вкладкой в ​​течение 00:00:13 часов и оставил обе вкладки, чтобы выйти из проекта 00:00: 23 верно? но он выходит из системы в 00:00:15, я не знаю, что здесь происходит, если он не обновлялся должным образом, как он мог оставаться на второй вкладке в течение длительного времени, когда я его использую ? если он обновляется правильно, как он может выйти из системы на основе первой открытой вкладки и следующего кода.

<script>
var IDLE_TIMEOUT = 10; //seconds
localStorage.setItem("setTimeOut", "0");

document.onclick = function () {    
    localStorage.setItem("setTimeOut", "0");
};

document.onmousemove = function () {   
    localStorage.setItem("setTimeOut", "0");
};

document.onkeypress = function () {  
    localStorage.setItem("setTimeOut", "0");
};

document.onfocus = function () {  
    localStorage.setItem("setTimeOut", "0");
};


window.setInterval(CheckIdleTime, 1000);
function CheckIdleTime() {  
    localStorage.setItem("setTimeOut", parseInt(localStorage.getItem("setTimeOut"))+1);
    if (localStorage.getItem("setTimeOut") >= IDLE_TIMEOUT) {
        alert('Times up!, You are idle for about 15 minutes, Please login to continue');
        document.location.href = "logout.php";
    }
}
</script>

person Pattatharasu Nataraj    schedule 10.07.2017    source источник
comment
эй, у тебя есть решение? ... если да, пожалуйста, разместите здесь скрипт функции ... так как мне тоже это нужно ... спасибо   -  person user3209031    schedule 21.08.2017
comment
Извините за задержку, приведенное ниже решение работает для меня, и я был отмечен как правильный.   -  person Pattatharasu Nataraj    schedule 24.08.2017


Ответы (2)


Вместо того, чтобы увеличивать значение каждую секунду на каждой вкладке, что означает, что оно будет увеличиваться каждую секунду с количеством открытых вкладок, а не за 1 секунду, просто установите текущее время взаимодействия, а затем сравнивайте с ним каждую секунду.

Итак, в ваших обработчиках событий сделайте это вместо этого:

localStorage.setItem("lastInteraction", Date.now())

... а затем в своей функции CheckIdleTime() удалите localStorage.setItem() и измените условие if на это:

Number(localStorage.getItem("lastInteraction")) + (IDLE_TIMEOUT * 1000) < Date.now()

Условие принимает время, когда произошло последнее взаимодействие, добавляет константу времени ожидания, а затем проверяет, прошло ли текущее время (сейчас) это значение.

person Lennholm    schedule 10.07.2017

Эта строка будет запускаться каждую секунду для каждого экземпляра вашего приложения (вкладки). Это означает, что если у вас открыто 2 вкладки, то она увеличивается на 2 каждую секунду вместо 1.

localStorage.setItem("setTimeOut", parseInt(localStorage.getItem("setTimeOut"))+1);

Вы можете исправить это, используя определенное время, когда пользователь будет выходить из системы, а не обратный отсчет.

person Steve Land    schedule 10.07.2017