【问题标题】:ASP.NET App Pool Reciclying log off the userASP.NET App Pool Reciclying 注销用户
【发布时间】:2010-01-11 06:45:12
【问题描述】:

我在 ASP.NET 3.5 中使用表单身份验证。

我注意到,当我的应用程序池回收(每 1.5 小时)时,通过 wuth Forms 身份验证的用户(具有 auth cookie)被注销并且必须重新登录。

如何避免?

【问题讨论】:

    标签: asp.net authentication


    【解决方案1】:

    您将会话模式设置为 InProc,这意味着它与该 W3WP 实例相关联并在重新启动时刷新。 (至少在 IIS6 上,不确定 IIS7)

    请改用 StateServer 或 SqlServer。

    Check the MSDN Documentation about sessionState,尤其是关于Session-State Modes的文章。

    编辑: Paulo 做了一个很好的评论:InProc 会话可以存储几乎所有对象,而 StateServer 和 SqlServer 要求它们是 Serializable。另外,我想补充一点,它们速度较慢 - 您无法超越 InProc Sessions 的速度,因为它们存储在内存中。另一方面:如果您需要向应用程序添加负载平衡,使用 State/SqlServer 将使您受益。各模式各有利弊,这里要挑毒。

    【讨论】:

    • 是的,但使用 StateServer 或 SqlServer 状态提供程序会降低在 Session 中存储任何对象的能力。只有 Serializable 对象才能以这种方式存储。并且根据应用程序的不同,它可能会对它产生巨大的影响。
    • 非常正确。它还可以显着降低性能 - 你必须在这里选择你的毒药。
    • 我也在寻找解决此问题的方法,但没有发现将我的会话状态模式设置为“StateServer”的帮助。我的会话信息(即 HttpContext.Current.Session 中的所有内容)已保存,但 HttpContext.Current.User 为 null 且 HttpContext.Request.IsAuthenticated 为 false。
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2011-05-02
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多