这通常是一个不可恢复的错误,通常最好显示为独立的错误页面。配置 web 应用程序以显示自定义的4nn/5nn 错误页面并设置 jQuery,如下所示:
$(document).ready(function() {
$.ajaxSetup({
error: handleXhrError
});
});
function handleXhrError(xhr) {
document.open();
document.write(xhr.responseText);
document.close();
}
这样,服务器端的4nn/5nn 错误页面将显示为好像它是由同步请求引起的一样。我之前已经发布了一个simliar topic关于这个主题。
另一种方法是 ajaxically 推迟会话超时。使用setInterval() 向服务器发起轮询请求(这反过来基本上从请求中获取会话),每次会话过期时间减去十秒左右。
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';
}
}