Обычно это неисправимая ошибка, которую лучше всего отображать как отдельную страницу с ошибкой. Сконфигурируйте веб-приложение для отображения настроенной страницы ошибки 4nn/5nn
и настройте jQuery следующим образом:
$(document).ready(function() {
$.ajaxSetup({
error: handleXhrError
});
});
function handleXhrError(xhr) {
document.open();
document.write(xhr.responseText);
document.close();
}
Таким образом, страница ошибки сервера 4nn/5nn
будет отображаться так, как если бы она была вызвана синхронным запросом. Я опубликовал тему simliar на эту тему раньше.
Другой способ - отсрочить тайм-аут сеанса. Используйте setInterval()
для отправки запроса опроса на сервер (который, в свою очередь, в основном получает сеанс из запроса) каждый раз, когда истекает время сеанса минус десять секунд или около того.
setInterval(function() { $.get('poll'); }, intervalInMillis);
Но предостережение заключается в том, что сеанс будет существовать до тех пор, пока у клиента будет открыто окно браузера, что иногда может занять слишком долго. При необходимости вы можете комбинировать это с сортировкой активности 1019 *, так что вероятность истечения сеанса будет минимальной. Вам все еще нужно объединить это с приличным обработчиком ошибок 4nn/5nn
.
$(document).ready(function() {
$.active = false;
$('body').bind('click keypress', function() { $.active = true; });
checkActivity(1800000, 60000, 0); // timeout = 30 minutes, interval = 1 minute.
});
function checkActivity(timeout, interval, elapsed) {
if ($.active) {
elapsed = 0;
$.active = false;
$.get('poll'); // Let server code basically do a "get session from request".
}
if (elapsed < timeout) {
elapsed += interval;
setTimeout(function() {
checkActivity(timeout, interval, elapsed);
}, interval);
} else {
alert($.messages.timeout); // "You will be logged out" blah blah.
window.location = 'http://example.com/logout';
}
}