Мы наблюдаем какое-то странное поведение в журналах нашего веб-сервера, когда идентичность текущего пользователя, в котором он находится, похоже, меняется местами с другим пользователем. Я опишу нашу настройку, прежде чем объяснять дальше.
Мы запустили веб-сайт asp.net (версия 3.5 платформы) на 2 веб-серверах Windows 2008 и используем проверку подлинности на основе форм. Они сбалансированы по нагрузке с использованием отдельного сервера под управлением Apache 2.2 в Linux (Cent OS 5). Балансировка нагрузки просто прикрепляет куки-файл к пользователю и направляет его на определенный сервер для каждого последующего запроса.
Мы иногда замечаем в журнале такие шаблоны (подробности запутаны)
Первая запись в журнале
имя пользователя - customer1@x.com
UserId - 1111
Веб-страница - страница1
IP - ip1
Время - 2010-06-29 12: 56: 20.750
SessionId - h3uyz2fsdfegugjy452sdz0far
Вторая запись в журнале
имя пользователя - customer1@x.com
UserId - 2222
Веб-страница - страница2
IP - ip2
Время - 2010-06-29 12: 57: 16.133
SessionId - 21ipjsdfsdfieqqwyfdokgqsb55
Мы используем проверку подлинности на основе форм, используя стандартную структуру проверки подлинности форм asp.net (стандартный элемент управления входом в систему, и мы реализовали пользовательский поставщик членства).
UserName - это идентификатор Windows, полученный с помощью «HttpContext.Current.User.Identity.Name». UserId - это идентификатор базы данных, установленный в сеансе. Идентификатор сеанса извлекается с использованием «HttpContext.Current.Session.SessionID»
Как вы можете видеть, одна и та же идентификация Windows одинакова для двух разных пользователей, с разными IP-адресами и с разными идентификаторами сеансов, которые посещают сайт примерно в одно и то же время. Мы проверили, и IP были из совершенно разных мест. Неправильная идентификация Windows, кажется, записывается. В UserId 2222 должно быть записано другое имя пользователя.
Поскольку это происходит очень редко, код является стандартным и существенно не менялся в течение некоторого времени, поэтому мы не «думаем», что это ошибка кодирования. Мы предполагаем либо проблему с балансировщиком нагрузки, либо некоторую проблему на веб-сервере. Я никогда раньше не слышал о таких проблемах в asp.net.
Недавно мы изменили нашу настройку с IIS6 в Windows 2003 и аппаратного балансировщика нагрузки Cisco на текущую настройку IIS7 в Windows 2008 и балансировку нагрузки Apache. Любые идеи приветствуются.
Запись аутентификации форм в файле web.config:
режим аутентификации = "Формы"
forms loginUrl = "LoginPage.aspx" name = ". ASPXFORMSAUTH"