Я работаю над проектом, основанным на сеансе. Я думал, что, похоже на банк, я создаю чек и предлагаю пользователям возможность прервать тайм-аут сеанса.Управление сессиями интервалов javascript
Я думал о создании setInterval, который проверял бы пустую страницу, требующую авторизации. Если таймер приближается к концу, это вызовет диалог, информирующий пользователя о том, что сеанс близок к концу. Кнопка «остаться в системе» сбросит таймер, и им также будет предоставлена возможность выйти из системы. Если заданный интервал получает «401» со страницы проверки, текущая страница будет обновлена до экрана входа в систему.
Имеет ли это смысл? Будет ли setInterval зависеть от браузера?
Как в стороне: что является самым простым способом очисткиInterval на основе взаимодействия с пользователем? Нужно ли мне проверять каждое нажатие клавиши и/или событие мыши? Или существует более широкий способ проверки того, взаимодействует ли пользователь со страницей (например, проверка фокуса или что-то еще)?
Tanka.
Таким образом, у меня были некоторые проблемы с основы я использую .. Обработка сеанса не очень хорошо, поэтому, казалось, проблема с обновлением сеанса timout вместо того, чтобы его тайм-аут всегда основывается на время с момента входа в систему, в отличие от последней активности. Во всяком случае, все получилось. Проблема, о которой я сейчас думаю, заключается в том, что, проверяя, завершен ли сеанс с помощью 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);
});
}
Привет, спасибо. Я думаю, что что-то, что я не рассматривал, это то, что если я сделаю 'get' на какой-то странице auth на интервале, каждый из этих get's сбросит таймер сессии, а? – stormdrain
Это правильно. Мое использование setInterval() было просто реализовать keep-alive в системе, которая во всех моих попытках увеличить тайм-аут сеанса. Может быть, вы можете использовать setInterval() для вызова скрипта, который увеличивает значение счетчика, хранящегося в сеансе, и очищает сеанс, когда значение этого счетчика больше? Кроме того, что-то нужно знать: некоторые браузеры будут кэшировать страницу, запрошенную повторно через setInterval(). Обязательно проверяйте и обходите это. Один из способов - добавить фиктивную строку запроса к URL-адресу запрашиваемой страницы и каждый раз увеличивать значение в этой строке запроса. – jkndrkn
Я решил, что будет проще просто установить тайм-аут, чтобы никогда, и обрабатывать смерть сеанса исключительно с помощью javascript. Это локальная система, поэтому не слишком беспокоиться о возможных последствиях для безопасности, и это просто казалось намного проще. Спасибо за вашу помощь. – stormdrain