繁体   English   中英

Asp.net与多台服务器组成身份验证IIS 7.5

[英]Asp.net forms authentication IIS 7.5 with multiple servers

我有一个运行在Windows 2008 R2(IIS 7.5)上的Asp.Net Web应用程序。 我有两个服务器WWW1和WWW2,并且为“ www”的轮询DNS设置了DNS记录。 我增加了AppPool超时和会话状态超时设置,以使用户在20分钟后不会注销。 但是我注意到用户正在随机注销。 我认为发生的情况是用户访问www.foo.com并登录,然后过了一段时间,循环将其导航到未创建Cookie的集群中的另一台服务器(WWW1或WWW2),因此提示他们登录。

我如何才能使其正常工作,并仍然使用循环DNS保留我的高可用性解决方案?

这里的问题是每个服务器都在内存中维护其自己的会话状态,并且不知道在其他服务器上创建的会话。

要解决此问题,您需要使用StateServer或SQLServer会话状态提供程序,而不是使用默认的InProc会话状态提供程序。

为此,您需要确保ASP.NET状态服务正在其中一台服务器上运行,然后需要将以下配置项添加到应用程序的web.config文件的system.web部分中,以替换“ SampleStateServer”,其中包含您在以下服务器上运行ASP.NET状态服务的服务器的名称:

    <sessionState mode="StateServer"
      stateConnectionString="tcpip=SampleStateServer:42424"
      cookieless="false"
      timeout="20"/>

Microsoft的相关文档可从http://msdn.microsoft.com/zh-cn/library/ms178586.aspx获得。

因为您是在Web场中运行此程序,所以还需要确保两台服务器上的Web应用程序使用相同的加密密钥。

为此,您需要在web.config中设置一个machineKey条目,其中涉及将以下内容添加到web.config的system.web部分中:

<machineKey validationKey="4D0590A0E4DE163BAD0EEEB6747467D770CD5FB2EA95BF02B27787A45CA579DECB01E2A1F16563DBAB44C1C0E54C7E53D65F2A7D0FDF378F4D3702B3F2C8B165" decryptionKey="928771D7B1B8C32608F56AC428EC5902985F6FB2E6E9A78733B6EAA493FA13F5" validation="SHA1" decryption="AES" />

有几个网站会为您生成密钥。 我通常使用http://aspnetresources.com/tools/machineKey

如果您想改用SQLState提供程序,则http://msdn.microsoft.com/zh-cn/library/ms178586.aspx在页面的“ Sql Server Mode”部分下具有所有配置信息。 由于必须配置要在其中存储状态的数据库,因此该设置稍微复杂一些。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM