MVC与JQuery:处理会话过期

前端之家收集整理的这篇文章主要介绍了MVC与JQuery:处理会话过期前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何处理在特定页面上具有 JQuery Ajax方法调用的MVC应用程序的会话过期.问题如下:

>当客户端达到会话超时时,我的每个控制器都会继承一个类,以检查会话是否存活(查找某些内容,如站点会话,数据库会话等),并将客户端重定向到一个新页面,会话到期;但是当我使用JQuery ajax在一些按钮点击调用控制器的方法时,情况是不同的,因为它跳过继承的类的验证,并允许我保留在页面上,但是当控制器尝试结束执行时的方法,显然它会抛出.Net错误:对象不是创建为对象的实例,没有找到Session变量,等等.所有这些都是因为由于异步方法调用而未处理的过期会话.

我该如何处理这个行为,哪个是最好的方法来处理它(尽可能的尝试不修改应用程序代码的很多部分)?

提前致谢.

PD:告诉我使用Jquery中的$.post()可能是有用的.

解决方法

这通常是一个不可恢复的错误,通常最好显示为独立的错误页面.配置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.

另一种方法是延迟会话超时.每次会话到期 – 零十秒钟左右,使用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,elapsed);
        },interval);
    } else {
        alert($.messages.timeout); // "You will be logged out" blah blah.
        window.location = 'http://example.com/logout';
    }
}
原文链接:https://www.f2er.com/jquery/176106.html

猜你在找的jQuery相关文章