对我来说这是一个非常奇怪的事情,我现在已经和它斗争了一段时间。我真的希望有人可以提供帮助。
我有一个相当典型的MVC 3网站,我似乎只是在IE和Firefox中遇到这个问题。 Chrome很好地播放。幸运的是,我们公司的大多数客户目前都在使用Chrome。
问题出现在一个看似随机的时间点,当我点击一个链接时,浏览器会自动将我重定向到Account / LogOff动作,从那里它显然会回到登录页面。然后,此链接将继续执行相同的操作。
我说“看似随意”,因为今天该链接将起作用,明天它将不会和所有其他(或大多数 - 我从来没有超过问题链接一次给这个问题)链接将没关系。有时重新启动服务器/开发环境将解决问题,有时则不会。浏览器将继续重定向到LogOff。
我已尝试查看引荐来源网址,但永远无法访问所引用的控制器/操作。 (如果我在操作中放置一个断点,则会错过,下一个点将是LogOff操作)
如果我在LogOff Action中查看堆栈跟踪,我看不到应用程序来自何处的任何信息。我也尝试了本页中的建议:Posting the Stack Trace on ASP.NET MVC,但我看不出为什么要重定向到LogOff操作。
在我遇到LogOff之前,我似乎能够遇到断点的唯一地方是Global.asax中的Application_BeginRequest,但无法看到它从那里开始。
我的猜测是,在某个地方,ASPNET Auth决定用户不再进行身份验证,并重定向到LogOff操作。问题是与ASPNET Auth相关的cookie仍然存在,其中包含数据并且尚未过期。
无论如何,我希望我已经提供了足够的信息。
提前致谢。
[编辑]
好的,所以我可能会更近一步。我偶然发现this link并查看我的global.asax中的Application_AuthenticateRequest中发生了什么。
我不太清楚为什么,当我点击链接时,Application_AuthenticateRequest被访问3次。当链接工作时(如我可以遵循它并且它不会将我注销),.ASPAUTH cookie的值保持不变。我通过添加断点和监视
来检查这一点 HttpContext.Current.Request.Cookies[".ASPXAUTH"].Value
当链接不起作用时,cookie第一次有值,另外两次为null。因此,由于ASPXAUTH cookie为null,系统会自动重定向到LogOut操作。
如果我考虑他们在链接中发布的解决方案,我不确定这是否适用于我。据我所知,加密的cookie仍然很小(如几百个字符长)并且不接近4096字节。此外,我在测试断开的链接时只有3个cookie,在任何给定时间我最多有5个cookie。
有什么想法吗?
答案 0 :(得分:2)
好的,所以我对饼干到期有所预感。所以我看看是否有办法在表单身份验证中保留(强制)cookie,这导致我http://www.codeproject.com/Articles/221889/How-to-Generate-Machine-Key-in-IIS7
我可以测试这个理论的唯一方法是继续正常工作和调试网站。 (这就是我花了这么长时间才发表这个答案的原因。)因为我介绍了这个解决方案,似乎问题已经解决了。
有趣的是,我前几天讲了一位建筑师,有20年的开发经验,关于我的问题。他看了我的代码,并确信这是表单身份验证代码中的一个错误。
我希望这可以帮助一些遇到同样问题的人。
答案 1 :(得分:0)