Asp.net会员注销自动

Asp.net会员注销自动

问题描述:

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

Im部署到共享主机环境的虚拟目录。 这里是我设置的成员资格提供

<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> 

发现这个Blog的解决方案。这里有一个摘要:

众所周知,当在Web场中运行时,您需要指定相同的机器密钥条目。这是由于以下事实:默认情况下,诸如FormsAuthTicket或ASP.NET MVC中的AntiForgeryToken使用机器密钥值来加密细节。否则,用户将被重定向回登录表单,否则当它们负载平衡到不同的服务器时,验证将失败。如果解密结果与FormsAuth的情况下的cookie不匹配,则会发生这种情况。导致用户不断想知道他为什么必须反复登录。

在2个不同的Web主机提供商遇到这个问题后,它发现托管服务提供商启动了几个应用的虚拟实例。这将重新创建Web场景场景。

+0

+1好的答案,但可能会更专注一点。 – 2010-05-18 02:36:04

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

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

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

生成这里的machineKey部分http://www.developmentnow.com/articles/machinekey_generator.aspx

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

这可能会解决您的问题。

+0

谢谢你,我做了什么,它工作得很好。 – alejandrobog 2010-05-19 15:36:11