1

我一直在使用 Visual Studio 2010 在 asp.net 中制作一个带有购物车的网站。我的问题是关于 Profile 变量和登录控件。

我按照一个非常简单的教程将购物车添加到我的网站。

1购物车示例

正如您在购物车教程中所见,作者使用 Profile 来跟踪购物车。

当我做这个时,我希望购物车在每个不同的用户登录时都保持不变,因为我们使用的是配置文件而不是会话变量。幸运的是,当我使用登录控件以不同用户身份登录时,购物车实际上会重置。

所以我的问题是,个人资料如何跟踪每个用户的购物车。我几乎可以肯定登录控件没有设置会话变量,所以我认为 Profile 对象不会自动检测登录控件中的不同用户......是吗?

请帮助我理解这一点,作者不是很清楚。

非常感谢!

4

3 回答 3

6

基本上它的工作方式是使用身份验证信息来识别用户。因此,当请求来自经过身份验证的用户时,框架使用用户名(通常以身份验证 cookie 的形式)将配置文件信息加载到当前请求中。

在您提供的示例中,因为作者正在使用<anonymousIdentification enabled="true"/>它允许匿名用户也可以使用个人资料信息。

当匿名用户发出请求时,AnonymousIdentificationModule 模块会创建一个 GUID 并将其写入名为 .ASPXANONYMOUS 的持久 cookie。此 GUID 将作为 ProfileProvider 的用户名。

于 2011-07-26T16:53:50.883 回答
2

将购物车和配置文件结合在一起的代码的重要部分位于最后(每次登录都会在幕后发生):

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 上阅读有关 Profiles 等的信息 - 例如:http: //msdn.microsoft.com/en-us/library/ewfkf772.aspx

于 2011-07-26T16:49:45.507 回答
0

关于会话,这并不完全正确。会话用于存储有关登录用户的某些信息。但是,有关登录用户的信息(由成功登录后的 asp:Login 控件设置)也存储在您可以从 HttpContext.Current.User 对象访问的主体中。存储用户信息的另一个位置是名为 .ASPXAUTH cookie 的 cookie。因此,可以从多个位置检索用户信息。但是 Profile 将依赖于 IPrincipal 类型的对象。至于匿名用户,Peter Mourfield给了你一个很好的答案,所以我不再重复他的话。

于 2011-08-01T21:51:07.057 回答