Я написал небольшой код jQuery, который отобразит диалоговое окно, если страница не обновляется в течение 1800 секунд. Диалог имеет обратный отсчет до того, как сеанс автоматически завершится. Если пользователь нажимает «Да, продолжайте работать», счетчик сбрасывается, и диалог исчезает. В противном случае пользователь будет переведен на страницу выхода.Как изменить счетчик setTimeout() с помощью запроса ajax?
Проблема, с которой я столкнулся, заключается в том, когда пользователь открывает вкладку нового браузера и продолжает работу над новой вкладкой. Затем старая вкладка станет бездействовать «после 1800 секунд без обновления», чтобы они потеряли все свои сеансы и вышли из системы.
Я создал страницу PHP, которая вернет сколько секунд осталось, проверив время в базе данных с помощью $_SESSION
. Но я не уверен, как сбросить счетчик, когда откроется диалог.
Я не уверен, как я могу изменить свой код, чтобы проверить фактические секунды, оставшиеся до отображения диалогового окна.
Вот мой код
<!-- This script will alert a user before forcing to logout -->
<script type="text/javascript">
var timer;
var closeDialogAfter = 180; //The default counter value
var idleTimeOutLimit = 1800 - closeDialogAfter; //Display the dialog after @idleTimeOutLimit seconds of idle time
var signOutScript = '/index.php?action=logout'; //logout url
var keepAliveScript = '/ajax/handler-keep-me-alive.php'; //php page to handle ajax request to keep the session alive
var dialogCountdown = '#dialog-countdown'; // the lable that is used to display the counter
var idleTimeout= '#idleTimeout'; //the div that is used for the dialog
$(function(){
//start the idle time out counter
startTimeoutCounter();
$(idleTimeout).dialog({
resizable: false,
autoOpen: false,
width: 400,
open: function(){
updateTimeoutCounter();
},
buttons: {
"Yes, Keep working": function(e) {
$.ajax({
url: keepAliveScript,
success: function(data) {
startTimeoutCounter();
$(idleTimeout).dialog("close");
}
});
},
"No, End Session": function(e){
forceLogOut();
$(this).dialog('close');
}
}
});
});
function startTimeoutCounter(){
timer = closeDialogAfter;
$(dialogCountdown).text(timer);
setTimeout(function(){
$(idleTimeout).dialog("open");
}, idleTimeOutLimit * 1000);
}
function updateTimeoutCounter(){
if( $(idleTimeout).dialog("isOpen")){
setTimeout(function(){
timer = timer -1;
$(dialogCountdown).text(timer);
(timer < 2) ? forceLogOut() : updateTimeoutCounter();
}, 1000);
} else
$(dialogCountdown).text(closeDialogAfter)
}
function forceLogOut(){
window.location = signOutScript;
}
</script>
Попробуйте использовать localstorage для установки оставшегося времени на вкладках – juvian
@juvian Как использовать локальное хранилище? – Jaylen
Что вы подразумеваете под вкладками? –