lid*_*min 11 error-handling asp.net-mvc jquery
我如何处理在某些页面上具有JQuery Ajax方法调用的MVC应用程序的会话到期.问题如下:
我怎么能处理这种行为,哪种是处理它的最佳方法(尽可能多地尝试不修改应用程序代码的这么多部分)?
提前致谢.
PD:告诉我使用$.post()Jquery 可能很有用.
Bal*_*usC 16
这通常是不可恢复的错误,通常最好显示为独立的错误页面.配置webapplication以显示自定义4nn/5nn错误页面并设置jQuery,如下所示:
$(document).ready(function() {
$.ajaxSetup({
error: handleXhrError
});
});
function handleXhrError(xhr) {
document.open();
document.write(xhr.responseText);
document.close();
}
Run Code Online (Sandbox Code Playgroud)
这样,服务器端4nn/5nn错误页面将显示为由同步请求引起.我之前发过关于这个主题的简短主题.
另一种方法是ajaxically推迟会话超时.用于setInterval()每次会话到期 - 减去十秒左右向服务器发送轮询请求(进而基本上从请求中抓取会话).
setInterval(function() { $.get('poll'); }, intervalInMillis);
Run Code Online (Sandbox Code Playgroud)
但需要注意的是,只要客户端的浏览器窗口打开,会话就会存在,这有时可能需要很长时间.如有必要,您可以将其与各种活动检查器结合使用,以便最大限度地减少会话过期的可能性.你仍然需要将它与一个像样的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';
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9795 次 |
| 最近记录: |