HttpContext.Current.User.Identity.Name не правильно при одновременном входе в систему с 2 машин - PullRequest
2 голосов
/ 08 октября 2010

У меня есть веб-сервер ASP.NET с IIS 7.

Мой код аутентификации (проверка подлинности с помощью форм) выглядит следующим образом на странице входа в систему:

            var isAuthenticated = Membership.ValidateUser(usernameTextBox.Text, passwordTextBox.Text);
            if (isAuthenticated)
            {
                FormsAuthentication.RedirectFromLoginPage(usernameTextBox.Text, true);
            }
            else
            {
                var customValidator = new CustomValidator();
                customValidator.IsValid = false;
                customValidator.ErrorMessage = GetLocalResourceObject("LoginFailed.ErrorMessage").ToString();
                customValidator.ValidationGroup = "AllValidators";
                Page.Validators.Add(customValidator);
            }

И на другой страницеЯ отображаю имя пользователя:

    if (HttpContext.Current.User.Identity != null &&
        !string.IsNullOrEmpty(HttpContext.Current.User.Identity.Name))
    {
        string authenticatedUsername = HttpContext.Current.User.Identity.Name;

        return "authenticatedUsername=" + authenticatedUsername;
    }
    else
    {
        return null;
    }

Моя проблема в том, что если я и один из моих коллег войдем в систему одновременно с разными именами входа (и разными учетными записями), учетные записи будут установлены в порядке (мы видим разные элементы).) но одно из имен настроено на другое, вошедшее в систему пользователя.

Так что, если я войду с именем пользователя foo и моим коллегой с именем пользователя bar, мы оба войдем в систему с нашими соответствующими учетными записями, нолибо я увижу имя пользователя bar, либо он увидит мое имя пользователя foo на странице.

Я видел некоторые другие сообщения о странном поведении аутентификации ASP.NET, и они утверждали, что это былоисправлено отключением функции кэша вывода.Это не сработало для меня.

Любая помощь приветствуется, я понятия не имею, как отследить проблему.

1 Ответ

0 голосов
/ 01 марта 2011

В конце концов проблема была с моим кодом.Я хотел отключить кэширование для страницы и использовал следующее

<%@ OutputCache Duration="1" NoStore="true" VaryByParam="none" %>

, которое, казалось, работало и было в основном правильно.Это не было завершено, хотя, и полная версия

<%@ OutputCache Duration="1" NoStore="true" Location="None" VaryByParam="none" %>

, которая работает.

A posteriori это довольно очевидно, что случилось.Хотя клиент не будет хранить страницу, ASP сделает это в течение одной секунды, если Location не установлен на None.

Документация по MSDN действительно вводила меня в заблуждение по этой теме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...