Jquery 如何在ASP.NET MVC 2中使用AJAX时检测重定向到登录

Jquery 如何在ASP.NET MVC 2中使用AJAX时检测重定向到登录,jquery,ajax,security,asp.net-mvc-2,Jquery,Ajax,Security,Asp.net Mvc 2,是否有一种方法可以检测对ASP.NET MVC应用程序的AJAX请求(使用jQuery)何时将我重定向到登录页面 我使用ajax调用呈现部分视图,但当用户注销(无论出于何种原因)时,我将返回登录表单,而不是返回302或其他指示(我可以看到) 谢谢 Kieronxmlhttp对象将自动跟随302响应,您可以使用firebug/fiddler检查此情况,您的第一个响应将是302重定向,xmlhttp将立即请求302响应中包含的位置,从而导致您的登录页面被响应 有几种方法可以避免上述情况 1) 添加一

是否有一种方法可以检测对ASP.NET MVC应用程序的AJAX请求(使用jQuery)何时将我重定向到登录页面

我使用ajax调用呈现部分视图,但当用户注销(无论出于何种原因)时,我将返回登录表单,而不是返回302或其他指示(我可以看到)

谢谢


Kieron

xmlhttp对象将自动跟随302响应,您可以使用firebug/fiddler检查此情况,您的第一个响应将是302重定向,xmlhttp将立即请求302响应中包含的位置,从而导致您的登录页面被响应

有几种方法可以避免上述情况

1) 添加一个元刷新标记,该标记将用户带到注销操作方法,并在会话超时前几秒钟将他们重定向到登录页面(安全imo的最佳选项)

2) 在超时前一分钟左右,向用户显示一个对话框,告诉他们即将注销。如果他们在一分钟内单击“保持登录”,则快速进行ajax调用,这将使会话在接下来的x分钟内保持有效,如果用户没有响应,只需发出一个客户端重定向到您的注销操作


3) 丑陋的解决方案可能是检查ajax响应,看看它是否是登录页面(测试某个id或类似的id),如果是这样,请将整个页面的客户端重定向到您的注销操作……虽然不好,但会起作用。

您可以创建一个新属性,类似于@Craig Stuntz给出的解决方案。在发出Ajax请求时,可以传入以下函数,如果用户会话超时,可以在其中显示某种自定义对话框:

    function OnAjaxError(context) {
        if (context._response.get_statusCode() == '403') {
            // Show a dialog telling the user they have been logged out
        }
        else {
            // Show a dialog telling the user there has been an error
        }
    }

我想也可以使用一个自定义的xmlhttp对象,jQuery确实支持这个对象-请看xhr-@Kieron,不知道这对您有什么帮助。不,您不能,我记得我经历过这个创伤!!