代码之家  ›  专栏  ›  技术社区  ›  alejandrobog

ASP.NET成员身份自动注销

  •  1
  • alejandrobog  · 技术社区  · 15 年前

    我最近部署了一个使用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 回复  |  直到 15 年前
        1
  •  2
  •   alejandrobog    15 年前

    找到了这个问题的解决方案 Blog . 以下是摘要:

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

    在两个不同的Web主机提供商遇到了这个问题后,结果发现主机提供商为您的应用程序提供了几个虚拟实例。这将重新创建Web场方案。

        2
  •  2
  •   Sky Sanders    15 年前

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

    用于加密/解密/哈希的动态生成的machinekey在每台计算机上都会有所不同,从而导致应用程序的不同实例无法识别票据。

    在web.config中显式地指定machinekey部分将确保应用程序的所有实例都将遵守一个票据,而不管其来源如何。

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

    把它贴到 <system.web> 应用程序的一部分,以便应用程序的所有实例都使用相同的加密密钥。

    这可以解决你的问题。

    推荐文章