4

编辑:删除了不相关的代码/说明,因为问题不仅仅是与那里的初始代码有关。

我有一个基于 MVC3 的应用程序,它使用大量 Ajax 调用(例如使用 jqGrid)和表单身份验证。在大多数情况下,我还在使用 Ajax 调用的某些控制器/操作上使用 [Authorize] 属性。每隔一段时间,我的应用程序就会因“此页面未正确重定向”或“此页面有重定向循环”而崩溃。

我用提琴手检查了这个。在以用户身份登录并尝试访问需要身份验证的页面后,有时我会被重定向到 Account/LogOn,然后进入无限循环。当我通过 Ajax 调用调用具有 Authorize 属性的任何控制器/操作时,通常会发生这种情况。该应用程序似乎向帐户/登录发送了 302 重定向。然后 Account/Logon 调用似乎重定向到自身。Fiddler 上的 textView 显示如下。

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Account/LogOn">here</a>.</h2>
</body></html>

我的 Global.asax 文件中有以下内容

protected void Application_EndRequest()
        {
            var context = new HttpContextWrapper(this.Context);
            //if we are an ajax request and forms authentication caused a 302, then we actually need to do a 401
            if (System.Web.Security.FormsAuthentication.IsEnabled && context.Response.StatusCode == 302 && context.Request.IsAjaxRequest())
            {
                context.Response.Clear();
                context.Response.StatusCode = 401; 
            }
        }

这在我的主布局页面中

<script type="text/javascript">
    $(document).ajaxError(function (xhr, props) {
        if (props.status == 401) {                
            location.reload();
        }
    });

</script>

我的表单身份验证的 web.config 设置有这个

<authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880"/>
    </authentication>

重定向每隔一段时间就会开始,并且它也不是使用相同的控制器/动作。只是看起来很随意。我不确定用户的 cookie 是否过期并由于某种原因导致此问题,或者是否是应用程序池回收的问题。任何有关如何解决此问题的建议将不胜感激。最近几天一直在努力解决这个问题,所以专家的任何帮助都会很棒。谢谢你

4

3 回答 3

1

使用Authorize属性装饰您的操作方法,使其可用于经过身份验证/登录的用户,然后检查用户角色。

于 2013-10-06T18:04:05.923 回答
1

我在上面的代码中没有看到循环。但也许在控制器 1 或控制器 2 之一中,您有一个重定向回此主页/索引操作。

我建议在测试站点时运行fiddler,当发生重定向循环时,您可以在那里轻松检测到它,然后更容易找出代码有什么问题。

于 2013-10-07T20:23:59.773 回答
0

请参阅链接问题中的答案。这是我的重定向循环问题的解决方案。感谢您的所有投入。

IIS 会话超时和表单身份验证循环

于 2013-11-11T09:53:24.997 回答