【发布时间】:2012-11-08 13:51:25
【问题描述】:
这对我来说是一个非常奇怪的问题,我已经和它斗争了一段时间了。我真的希望有人可以提供帮助。
我有一个相当典型的 MVC 3 网站,我似乎只在 IE 和 Firefox 中遇到这个问题。 Chrome 玩得很好。我很幸运,目前我们公司的大多数客户都使用 Chrome。
问题出现在一个看似随机的时间点,当我点击一个链接时,浏览器会自动将我重定向到 Account/LogOff 操作,然后它显然会从那里返回到登录页面。然后,此链接将以相同的行为继续。
我说“看似随机”是因为今天该链接将起作用,明天它将不起作用,并且所有其他(或大多数 - 我从来没有超过一次给出此问题的问题链接)链接会很好。有时重新启动服务器/开发环境会解决问题,有时则不会。浏览器将继续重定向到 LogOff。
我已尝试查看引荐来源网址,但永远无法到达所引荐的控制器/操作。 (如果我在操作中放置断点,则会错过它,到达的下一个点将是 LogOff 操作)
如果我在注销操作中查看堆栈跟踪,我看不到应用程序来自何处的任何信息。我也尝试了此页面中的建议: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 为空,系统会自动重定向到 LogOut 操作。
如果我考虑他们在链接中发布的解决方案,我不确定这是否适用于我。据我所知,加密的 cookie 仍然很小(几百个字符长)并且不接近 4096 字节。此外,在我测试断开的链接时,我只有 3 个 cookie,并且在任何给定时间我最多有 5 个 cookie。
有什么想法吗?
【问题讨论】:
-
您是否尝试过使用
Glimpse之类的东西来让您更深入地了解正在发生的事情? -
会试一试,谢谢。
-
您使用的是共享主机还是环境中的多个服务器?
-
它发生在我们的共享主机环境中,当我在本地机器上运行所有东西时。不过,这个问题在我的本地机器上更经常发生。
-
@BradChristie 不确定我在寻找什么,但使用 Glimpse,这是我在单击一个坏掉的链接后得到的:* 我所有的会话都保持不变。 * Cookies 都还在。 * 在 Trace 选项卡中,它只显示: - CreateControllerInterceptor.CreateController(requestContext, "Account") = Jade.Web.Controllers.AccountController - IDependencyResolver.GetService
() = ASP._Page_Views_Account_LogOn_cshtml 是一种准确查看的方法在单击链接和被重定向到注销操作之间发生了什么?
标签: asp.net-mvc-3 logoff redirect