#javascript #php
#javascript #php
Вопрос:
Это был начальный код, который я использовал:
setInterval(function(){
r=confirm("You are about to be logged out! Press cancel if you want to remain logged in.");
if (r == true){
window.location.href = '../logout.php';
}else{
location.reload();
}
},30000);
Диалоговое окно подтверждения ожидает действий от пользователя. Если действие «отмена», они остаются в системе. Если действие «ОК», они перенаправляются на logout.php страница. Проблема в том, что если пользователь не отвечает, он не выходит из системы по истечении этих 30 секунд.
Тогда я подумал, что могу использовать два временных интервала:
setInterval(function(){
window.location.href = '../logout.php';
},60000);
setInterval(function(){
r=confirm("You are about to be logged out! Press cancel if you want to remain logged in.");
if (r == true){
window.location.href = '../logout.php';
}else{
location.reload();
}
},30000);
но поскольку метод confirm () останавливает скрипт, 60000 мс никогда не выполняются. Есть ли способ заставить это работать?
Комментарии:
1. Вы спрашиваете своих пользователей каждые 30 секунд, хотят ли они оставаться в системе?
2. 1 минута — это просто пример. Это не актуальная проблема здесь. Я мог бы написать 600000.
3. То, что я пытался сказать, — это то, что вам, вероятно, следует переосмыслить эту концепцию. Представьте, что вы пишете вопрос в Stackoverflow, диалоговое окно подтверждения открывается точно в тот момент, когда вы собираетесь нажать enter. Вы вышли из системы, и ваш вопрос исчез.
4. Вы правы, подтверждение останавливает скрипт. Если вы хотите, чтобы скрипт продолжал выполняться в фоновом режиме, вам может быть лучше использовать модальный формат на основе HTML.
5. Скажем, если они просто покидают свой рабочий стол или закрывают браузер, не отвечая.
Ответ №1:
Вот мое предложение
- запустите таймер, который выводит пользователя из системы
- запустите graceTimer, чтобы показать ссылку
- при нажатии на ссылку таймеры перезапускаются
- если нет, пользователь выходит из системы
https://jsfiddle.net/mplungjan/t5ejs72q/
let tId, tId1;
const end = 15000, // change to whatever - 30 minutes
grace = 3000, // 3 secs - should be 30 secs in real life
timer = () => {
clearTimeout(tId);
tId = setTimeout(function() {
// location.replace('../logout.php')
console.log("logged out")
}, end);
},
graceTime = () => tId1 = setTimeout(toggleGrace, end - grace),
toggleGrace = () => document.getElementById("stayLink").classList.toggle("hide"),
init = () => {
timer();
graceTime()
};
document.getElementById("stayLink").addEventListener("click", function(e) {
e.preventDefault();
toggleGrace();
init()
})
init()
.hide {
display: none;
}
<a href="#" id="stayLink" class="hide">Stay logged in?</a>