Ответ 1
Обычно это неустранимая ошибка, которая обычно лучше всего отображаться как отдельная страница с ошибкой. Настройте веб-приложение, чтобы отобразить настроенную страницу ошибки 4nn/5nn
и настроить jQuery следующим образом:
$(document).ready(function() {
$.ajaxSetup({
error: handleXhrError
});
});
function handleXhrError(xhr) {
document.open();
document.write(xhr.responseText);
document.close();
}
Таким образом, страница с ошибкой на стороне сервера 4nn/5nn
будет отображаться так, как если бы она была вызвана синхронным запросом. Ранее я разместил тему simliar о предмете.
Другой способ - отложить тайм-аут сеанса ajaxically. Используйте setInterval()
, чтобы запустить запрос опроса на сервер (который в свою очередь в основном захватывает сеанс из запроса) каждый раз в сеанс -expiration-минус-десять секунд или около того.
setInterval(function() { $.get('poll'); }, intervalInMillis);
Но оговорка заключается в том, что сеанс сохранится до тех пор, пока клиент откроет окно своего браузера, что может занять слишком много времени. Вы можете, если необходимо, объединить это с помощью своего рода проверки активности, чтобы вероятность того, что время ожидания сессии истекло, будет сведено к минимуму. Вам все равно нужно объединить это с достойным обработчиком ошибок 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';
}
}