пользователь аутентифицирован, но Ticket.UserData отсутствует - PullRequest
3 голосов
/ 21 февраля 2009

У меня есть следующий код:

if (HttpContext.Current.Request.IsAuthenticated == false)
{
    // this isn't reached so i know user is Authenticated
    return;
}
FormsIdentity fIdentity = HttpContext.Current.User.Identity as FormsIdentity;
string[] delimitedUserData = fIdentity.Ticket.UserData.Split('|');
// but at this point delimitedUserData.Length is 0

Есть ли какие-либо идеи о том, что может привести к тому, что билет аутентификации будет действительным, но данные пользователя исчезнут?

Моя программа обычно работает просто отлично, и все данные пользователя легко доступны. Но время от времени я попадаю в такое состояние, когда там нет пользовательских данных.

Ответы [ 4 ]

0 голосов
/ 18 августа 2009

Я ищу ту же проблему и нахожу проблему, которую я использовал «FormsAuthentication.RedirectFromLoginPage» для добавления файла cookie. я изменился в "response.cookies.add". и его работа.

0 голосов
/ 22 февраля 2009

Сама по себе FormsAuthentication ничего не помещает в ваши UserData. Было бы целесообразно поставить точку останова рядом с тем местом, где вы обрабатываете создание заявки (и создание ваших пользовательских данных) и отслеживаете путь, который он принимает.

Поскольку ваша ошибка временная, возможно, будет сложно заставить ее сработать. Для начала можно проследить, как он обрабатывает истечение срока действия файла cookie или когда файл cookie недействителен.

Если вы используете Firefox, я рекомендую использовать плагин «Add N Edit Cookies»: https://addons.mozilla.org/en-US/firefox/addon/573

0 голосов
/ 23 февраля 2009

Не уверен, что это лучший подход, так как я все еще довольно новичок в asp.net, но способ, которым я делаю это при входе в систему, - установить значение сеанса, которое я могу проверить на последующих страницах - таким образом, если файл cookie отсутствует, я не смогу вернуть значение, чтобы перенести его на страницу входа.

Итак, сразу после входа в систему (в событии _LoggedIn) я делаю:

        // write ClientID to the session
        Session.Add("ClientID", lClientID);

затем при загрузке каждой страницы за логином я делаю:

if (User.Identity.IsAuthenticated == false || Convert.ToInt32(Session["ClientID"]) == 0)
    {
        Server.Transfer("Login.aspx");
    }

Пока это работает довольно хорошо для меня.

0 голосов
/ 22 февраля 2009

Билет хранится в куки. Что происходит в вашем коде при доступе к странице сразу после истечения срока действия файла cookie?

Также обратите внимание, что User.Identity.IsAuthenticated возвращает true из коробки, так что свойство, возможно, не лучшая вещь для тестирования?

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