5

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

我能够确定我们在哪台服务器上,当我们在网站上导航时,我们停留在服务器 A 上。如果我离开它 5 分钟并尝试另一个页面,我将被推送到服务器 B,注销并显示登录页面。

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

关于什么可能导致注销的任何想法?我猜这是我对 ASPXAUTH 工作原理的误解。

4

2 回答 2

2

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

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

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

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

假设主机设置是正确的,如果某些条件不满足,也许您的页面上有初始化代码会注销您?

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

编辑:本指南对表单身份验证问题进行故障排除非常详细,并且很有帮助:表单身份验证故障排除

于 2012-12-05T19:39:26.953 回答
0

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

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

于 2012-12-05T19:57:47.080 回答