我最近部署了一个使用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>
答案 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>
部分,以便您应用的所有实例都使用相同的加密密钥。
这可以解决您的问题。