【问题标题】:Response.IsAuthenticated Is False After 30 SecondsResponse.IsAuthenticated 30 秒后为假
【发布时间】:2012-09-22 03:59:21
【问题描述】:

我有一个 ASP.NET MVC3 应用程序部署到共享托管服务。它使用 FormsAuthentication 和 SSL:

<authentication mode="Forms">
  <forms loginUrl="~/Home/Index" timeout="240" requireSSL="true" />
</authentication>

问题出在一些 Razor(部分)视图中:我对控制器方法执行回调,为了测试,该方法只是休眠并返回 PartialView。我的问题围绕着 Response.IsAuthenticated。在回调和睡眠之前为真,只要睡眠时间为 30 秒或更短,它就保持为真。但是,我已经用各种更长的持续时间(例如 55 秒)对其进行了测试,并且 Response.IsAuthenticated 在这些情况下变为错误。这是一个问题,因为在我的原始代码中我需要进行重定向(通过 JS,open.window,在我的部分视图中)。由于 Response.IsAuthenticated 为 false FluentSecurity 立即将用户发送到 loginUrl(我不想要)。

这似乎与某处的超时有关(“KeepAlive”,“ServerTimeout”?),但我已经用谷歌搜索了 response.isauthenticated timeout 并没有提出任何结果。坦率地说,这种行为似乎在整个站点中发生:如果用户离开页面(我正在使用 FF)超过一分钟左右,那么当他们尝试访问页面时,他们会自动被重定向到 loginURL。请注意,我的会话超时设置为“120”。有趣的是,当应用程序部署到 Windows Azure 时,我没有遇到这种行为(不过还有其他问题);当我切换到其他主机时,它才开始发生。

任何指向有关此主题的信息的指针将不胜感激。

【问题讨论】:

    标签: asp.net-mvc forms-authentication


    【解决方案1】:

    也许主机在几秒钟空闲时正在杀死服务器中的 AppPool。

    您记录应用程序关闭事件以查看是否是这种情况:http://weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx

    【讨论】:

    • 是的,就是这样,我不得不切换到不同的托管公司。我的应用程序现在按预期工作。我从来没有发现 Azure 的问题是什么,但我现在真的不在乎,因为我已经放弃了它。
    • @NormanKleinberg 请注意,AppPool 仍会不时被回收,因此一小部分用户可能仍会得到它。
    猜你喜欢
    • 1970-01-01
    • 2013-10-13
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多