【问题标题】:Asp.net membership logout automaticallyAsp.net 会员自动注销
【发布时间】:2010-05-17 22:44:25
【问题描述】:

我最近部署了一个使用 asp.net 成员资格 (SqlMembershipProvider) 的应用程序,但我不知道为什么,但它会在 1 分钟不活动后自动注销。这不会发生在我的开发环境中。我什至将 userIsOnlineTimeWindow 设置为 60,这应该是在几分钟内。任何想法为什么会发生这种情况?

我正在部署到共享主机环境中的虚拟目录。 这是我设置会员提供程序的方法

<membership defaultProvider="FaceMoviesMembership" userIsOnlineTimeWindow="60">


<providers>
<clear/>
<add name="FaceMoviesMembership" type="System.Web.Security.SqlMembershipProvider" connectionStringName="FaceMoviesAuthConnectionString" 
         enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" maxInvalidPasswordAttempts="10" 
         passwordAttemptWindow="60" requiresUniqueEmail="false" passwordFormat="Clear" applicationName="FaceMoviesWeb" 
         minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0"/>


</providers>

【问题讨论】:

    标签: asp.net asp.net-membership membership


    【解决方案1】:

    Blog 上找到了解决方案。这是一个摘要:

    众所周知,在网络场中运行时需要指定相同的机器密钥条目。这是因为诸如 FormsAuthTicket 或 ASP.NET MVC 中的 AntiForgeryToken 之类的东西默认使用机器密钥值来加密细节。否则,当用户负载平衡到不同的服务器时,用户将被重定向回登录表单或验证将失败。当解密结果与 FormsAuth 的 cookie 不匹配时,就会发生这种情况。让用户一直想知道为什么他必须一遍又一遍地登录。

    在 2 家不同的网络托管服务提供商遇到过这个问题,事实证明托管服务提供商为您的应用启动了多个虚拟实例。这将重新创建网络场场景。

    【讨论】:

      【解决方案2】:

      如上所述,您的问题可能是实例问题。

      用于加密/解密/散列的动态生成的 machineKey 在每台机器上都会有所不同,从而导致您的应用程序的不同实例无法识别票证。

      在您的 web.config 中明确指定 machineKey 部分将确保您的应用程序的所有实例都将兑现票证,无论来源如何。

      在此处生成 machineKey 部分http://www.developmentnow.com/articles/machinekey_generator.aspx

      并将其粘贴到您应用的&lt;system.web&gt; 部分,以便您应用的所有实例都使用相同的加密密钥。

      这可能会解决您的问题。

      【讨论】:

        猜你喜欢
        • 2011-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-11
        • 2022-12-22
        • 1970-01-01
        • 1970-01-01
        • 2010-10-17
        相关资源
        最近更新 更多