这对我来说是一个非常奇怪的问题,我已经与它斗争了一段时间。我真的希望有人能提供帮助。
我有一个相当典型的 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。
任何想法?