Asp.net会员自动注销

时间:2010-05-17 22:44:25

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

我最近部署了一个使用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>

2 个答案:

答案 0 :(得分:2)

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

  

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

     

在2个不同的网络托管服务提供商遇到此问题后,事实证明托管服务提供商会启动应用的多个虚拟实例。这将重新创建Web场方案。

答案 1 :(得分:2)

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

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

在web.config中明确指定machineKey部分将确保您的应用程序的所有实例都将遵守票证而不管来源。

在此处http://www.developmentnow.com/articles/machinekey_generator.aspx

生成machineKey部分

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

这可以解决您的问题。