1

这对我来说是一个非常奇怪的问题,我已经与它斗争了一段时间。我真的希望有人能提供帮助。

我有一个相当典型的 MVC 3 网站,我似乎只在 IE 和 Firefox 中遇到这个问题。Chrome 配合得很好。幸运的是,目前我们公司的大多数客户都使用 Chrome。

问题是在一个看似随机的时间点,当我点击一个链接时,浏览器会自动将我重定向到 Account/LogOff 操作,然后它显然会从那里返回到登录页面。然后,此链接将以相同的行为继续。

我说“看似随机”是因为今天该链接将起作用,明天它将不起作用,并且所有其他(或大多数 - 我从来没有超过一次给出这个问题的问题链接)链接会很好。有时重新启动服务器/开发环境会解决问题,有时则不会。浏览器将继续重定向到 LogOff。

我曾尝试查看引荐来源网址,但将永远无法访问所引用的控制器/操作。(如果我在动作中放置一个断点,它将被错过,下一个到达点将是 LogOff 动作)

如果我在注销操作中查看堆栈跟踪,我看不到应用程序来自何处的任何信息。我还尝试了此页面中的建议:在 ASP.NET MVC 上发布堆栈跟踪,但我不明白为什么我被重定向到 LogOff 操作。

我似乎能够在点击 LogOff 之前遇到断点的唯一地方是 Global.asax 中的 Application_BeginRequest,但从那里看不到它的去向。

我的猜测是,在某个地方,ASPNET Auth 决定不再对用户进行身份验证并重定向到 LogOff 操作。问题是与 ASPNET Auth 关联的 cookie 仍然存在,其中有数据并且它们还没有过期。

无论如何,我希望我已经就这个问题提供了足够的信息。

提前致谢。

[编辑]

好的,所以我可能更接近了一步。我遇到了这个链接,并查看了 global.asax 中的 Application_AuthenticateRequest 中发生了什么。

我不太清楚为什么,当我点击一个链接时,Application_AuthenticateRequest 会被访问 3 次。当链接有效时(因为我可以关注它并且它不会让我退出),.ASPAUTH cookie 的值保持不变。我通过添加断点和监视来检查这一点

HttpContext.Current.Request.Cookies[".ASPXAUTH"].Value

当链接不起作用时,cookie第一次有值,然后其他两次为null。因此,由于 ASPXAUTH cookie 为空,系统会自动重定向到 LogOut 操作。

如果我考虑他们在链接中发布的解决方案,我不确定这是否适用于我。据我所知,加密的 cookie 仍然很小(如几百个字符长)并且不接近 4096 字节。此外,在我测试断开的链接时,我只有 3 个 cookie,并且在任何给定时间我最多有 5 个 cookie。

任何想法?

4

1 回答 1

2

好的,所以我有一种关于 cookie 过期的预感。因此,我查看了是否有办法让(强制)表单身份验证中的 cookie 保持活动状态,这导致我访问http://www.codeproject.com/Articles/221889/How-to-Generate-Machine-Key-in- IIS7

我可以测试这个理论的唯一方法是继续正常工作和调试站点。(这就是为什么我花了这么长时间才发布这个答案的原因。)自从我介绍了这个解决方案以来,问题似乎已经解决了。

有趣的是,前几天我和一位拥有 20 年开发经验的架构师谈论了我的问题。他查看了我的代码,确信这是表单身份验证代码中的一个错误。

我希望这可以帮助一些遇到我遇到同样问题的人。

于 2013-01-15T15:07:59.517 回答