由于循环负载平衡器,用户正在退出网站

时间:2012-12-05 16:47:06

标签: c# asp.net asp.net-mvc load-balancing

我们的运营商已在我们的门户网站上实施了循环负载均衡器,这似乎导致了一些我无法深入了解的问题。

我能够确定我们所在的服务器,当我们浏览我们停留在服务器A上的网站时。如果我离开它5分钟并尝试另一个页面,我将被推送到服务器B,退出并显示登录页面。

我已经让他们确保machine.config中的MachineKey在两台服务器上是相同的,我在本地测试会话没有被使用 - 我可以完全在本地关闭会话,它仍然作品。我已经在两台服务器上验证了它在域上创建了一个ASPXAUTH cookie,因此我们应该被归类为在两台服务器上都经过身份验证 - 但每次更换服务器时都会丢失我的身份验证。

关于可能导致退出的任何想法?我猜这是我对ASPXAUTH如何工作的误解。

2 个答案:

答案 0 :(得分:2)

会话与表单身份验证分开处理。对此here有一个很好的解释。

负载平衡环境中表单身份验证失败的最常见原因是MachineKey元素缺乏同步。您已声明您已经有服务器运营商确保MachineKey已同步,但您是否已经以某种方式自行验证了这一点?所有的Web服务器都是这种情况吗?从之前与几个商业网站主机的交易中,我发现(不幸的是)很难从表面上看出他们的保证。

要检查的另一件事是所有主机上的FormsAuthentication配置(超时,路径,名称等)是否相同。

所有主机上的补丁级别是否相同?您可能希望查看提及here的兼容性开关是否适用于您的情况。

假设主机设置正确,可能您在页面上有初始化代码,如果某些条件未满足,则会将您注销?

尝试查看服务器日志并跟踪失败的页面请求期间涉及的HTTP请求序列。这可能会产生一些线索。

编辑:此表单身份验证问题疑难解答指南详细,非常有用:Troubleshooting Forms Authentication

答案 1 :(得分:0)

检查依赖于cookie的任何其他应用程序功能。服务器B上的Web服务器将无法识别来自服务器A的cookie。如果您的身份验证的任何部分取决于正在填充的cookie,那么这可能会导致您的问题。

您可能已经确保用于cookie的域在所有负载平衡服务器上都是相同的,但我想我会提到它。如果域不兼容,则浏览器不会向服务器发送cookie。