Я работаю над проектом, основанным на сессиях. Я думал, что, как и в банке, я бы создал чек и предложил бы пользователям помешать тайм-ауту сессии.
Я думал о создании setInterval, который бы проверял пустую страницу, требующую аутентификации. Если таймер приближается к конечному времени, он выдает диалог, сообщающий пользователю, что сеанс близок к концу. Кнопка «оставаться в системе» сбрасывает таймер, и им также предоставляется возможность выйти из системы. Если установленный интервал получает «401» со страницы проверки, текущая страница будет обновлена до экрана входа в систему.
Имеет ли это смысл? Будет ли setInterval застревать в браузере?
В качестве отступления: какой самый простой способ очистить Interval на основе взаимодействия с пользователем? Нужно ли проверять каждое нажатие клавиши и / или событие мыши? Или есть более широкий способ проверки, взаимодействует ли пользователь со страницей (например, проверка фокуса или что-то в этом роде)?
Танк.
Итак, у меня были некоторые проблемы с фреймворком, который я использую .. Обработка сеанса не очень хорошая, поэтому, похоже, возникла проблема с обновлением тайм-аута сеанса вместо того, чтобы его время ожидания всегда зависело от времени с момента входа в систему , в отличие от последней активности. Во всяком случае, с этим справились. Вопрос, который меня сейчас интересует, заключается в том, что, проверяя, аутентифицируется ли сеанс с помощью setInterval, сеанс будет обновляться с помощью проверки, поэтому время сеанса никогда не будет превышено. Или я что-то упустил?
Я решил справиться с этим только с помощью JavaScript. Установите время ожидания на never
в конфигурации фреймворка, и я работаю только с setTimeout
.
function alerter(msg){
//warn user session about to expire; give opportunity to save
}
function killSess(){
window.location = '/logout';
}
function sessTimer(time){
timerID = window.setTimeout('killSess();',time);
}
function observe(div){
Event.observe(div, 'click', function(){
clearTimeout(timerID);
sessTimer(30000);
});
Event.observe('bodyDiv', 'keydown', function(e){
clearTimeout(timerID);
sessTimer(30000);
});
}