Переменные профиля в сеансе отслеживания asp.net с контролем входа? - PullRequest
1 голос
/ 11 июля 2011

Я делаю веб-сайт с корзиной в asp.net, используя Visual Studio 2010. Мой вопрос касается переменной Profile и Login Control.

Я следовал довольно простому руководству, чтобы добавить корзинуна мой сайт.

1 : Пример корзины покупок

Как видно из руководства по корзине покупок, автор использовал профиль для сохраненияотслеживание корзины.

Когда я делал это, я ожидал, что корзина останется неизменной при каждом входе другого пользователя, поскольку мы использовали профиль, а не переменную сеанса.К счастью, корзина действительно сбрасывалась, когда я входил в систему как разные пользователи с контролем входа в систему.

Поэтому мой вопрос заключается в том, как профиль отслеживает корзину для каждого пользователя.Я почти уверен, что элемент управления логином не устанавливает переменную сеанса, поэтому я не думаю, что объект Profile автоматически определяет другого пользователя из элемента управления логином ... не так ли?

Пожалуйста, помогите мне понять это, автор не совсем ясно.

Большое спасибо!

Ответы [ 3 ]

6 голосов
/ 26 июля 2011

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

В случае примера, который вы предоставили, поскольку автор использует <anonymousIdentification enabled="true"/>, что позволяет также предоставлять информацию профиля для анонимных пользователей.

Когда анонимный пользователь делает запрос, модуль AnonymousIdentificationModule создает GUID и записывает его в постоянный файл cookie с именем .ASPXANONYMOUS. Этот GUID будет действовать как имя пользователя для профиля ProfileProvider.

2 голосов
/ 26 июля 2011

важная часть кода, которая объединяет корзину и профиль, находится в самом конце (происходит за кулисами при каждом входе в систему):

void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs e)
{
    ProfileCommon anonymousProfile = Profile.GetProfile(e.AnonymousID);
    if (anonymousProfile.SCart != null)
    {
        if (Profile.SCart == null)
            Profile.SCart = new ShoppingCartExample.Cart();

        Profile.SCart.Items.AddRange(anonymousProfile.SCart.Items);

        anonymousProfile.SCart = null;
    }

    ProfileManager.DeleteProfile(e.AnonymousID);
    AnonymousIdentificationModule.ClearAnonymousIdentifier();
}

Вы можете прочитать о профилях и т. Д. На MSDN -например: http://msdn.microsoft.com/en-us/library/ewfkf772.aspx

0 голосов
/ 02 августа 2011

Это не совсем верно в отношении сессии. Сеансы используются для хранения определенной информации о зарегистрированных пользователях. Однако информация о зарегистрированном пользователе (как установлено asp: контроль входа после успешного входа в систему) также сохраняется в субъекте, к которому вы можете получить доступ из объекта HttpContext.Current.User. Другое место, где хранится информация о пользователях, находится в файле cookie с именем .ASPXAUTH cookie. Таким образом, есть несколько мест, откуда пользовательская информация может быть получена. Но Profile будет опираться на объект типа IPrincipal. Что касается анонимных пользователей, Питер Морфилд дал вам хороший ответ, поэтому я не буду повторять его слова.

...