Windows身份在用户之间变得混乱

时间:2010-06-30 10:19:32

标签: c# asp.net iis session-state load-balancing

我们在Web服务器日志中观察到一些奇怪的行为,其中当前登录用户的身份似乎与另一个用户交换。在进一步解释之前,我将描述我们的设置。

我们在2台Windows 2008 Web服务器上运行asp.net网站(框架的v3.5)并使用表单身份验证。它们使用在Linux上运行Apache 2.2的单独服务器(Cent OS 5)进行负载平衡。负载平衡只是将cookie附加到用户,并将它们定向到特定服务器以用于每个后续请求。

我们偶尔会注意到日志中的模式(详细信息模糊)

首次登录

UserName - customer1@x.com

UserId - 1111

网页 - 第1页

IP - ip1

时间 - 2010-06-29 12:56:20.750

SessionId - h3uyz2fsdfegugjy452sdz0far

第二次日志条目

UserName - customer1@x.com

UserId - 2222

网页 - 第2页

IP - ip2

时间 - 2010-06-29 12:57:16.133

SessionId - 21ipjsdfsdfieqqwyfdokgqsb55

我们使用标准的asp.net表单身份验证框架(标准登录控件,我们实现了自定义成员资格提供程序)使用表单身份验证。

UserName是使用“HttpContext.Current.User.Identity.Name”检索的Windows标识UserId是会话中设置的数据库Id。使用“HttpContext.Current.Session.SessionID”

检索sessionId

正如您所看到的,对于2个不同的用户,在不同的IP地址和不同的会话ID下,相同的Windows身份是相同的,大约在同一时间点击该站点。我们检查过,IP来自完全不同的位置。错误的Windows身份似乎被记录下来了。 UserId 2222应该记录不同的用户名。

由于偶尔会发生这种情况,因此代码是标准的,并且在一段时间内没有发生实质性变化,我们不会“认为”这是编码错误。我们假定负载均衡器存在问题或Web服务器存在问题。我以前从未在asp.net中听说过这样的问题。

最近,我们确实将我们在Windows 2003上的IIS6和思科硬件负载均衡器的设置更改为Windows 2008上IIS7的当前设置和Apache负载平衡。任何想法都赞赏。

web.config中的表单身份验证条目是

身份验证模式=“表单”

表单loginUrl =“LoginPage.aspx”name =“。ASPXFORMSAUTH”

2 个答案:

答案 0 :(得分:0)

您是否设置了任何会话变量?每个请求的会话ID都会重置,除非您为每个用户在会话中存储某些内容,

答案 1 :(得分:0)

您必须保证每个用户cookie都是唯一的。你不能依赖于sessionid。