我使用visual studio 2010在asp.net上创建了一个带有购物车的网站。我的问题是关于Profile变量和登录控件。
我按照一个非常简单的教程向我的网站添加购物车。
正如您在购物车教程中所看到的,作者使用个人资料来跟踪购物车。
当我这样做的时候,我原本期望购物车与每个不同的用户登录保持一致,因为我们使用的是个人资料,而不是会话变量。幸运的是,当我使用登录控件以不同用户身份登录时,购物车实际上会重置。
所以我的问题是,Profile如何跟踪每个用户的购物车。我几乎可以肯定登录控件没有设置会话变量,所以我认为Profile对象不会自动检测登录控件中的其他用户......是吗?
请帮助我理解这一点,作者不太清楚。
非常感谢!
答案 0 :(得分:6)
基本上它的工作方式是使用身份验证信息来识别用户。因此,当来自经过身份验证的用户的请求时,框架使用用户名(通常以身份验证cookie的形式)将配置文件信息加载到当前请求中。
对于您提供的示例,因为作者正在使用<anonymousIdentification enabled="true"/>
,它允许匿名用户也可以使用个人资料信息。
当匿名用户发出请求时,AnonymousIdentificationModule模块会创建一个GUID并将其写入名为.ASPXANONYMOUS的持久性cookie中。此GUID将充当ProfileProvider的用户名。
答案 1 :(得分: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上阅读有关个人资料等信息 - 例如:http://msdn.microsoft.com/en-us/library/ewfkf772.aspx
答案 2 :(得分:0)
这对会话来说并不完全正确。会话用于存储有关登录用户的某些信息。但是,有关登录用户的信息(由asp:登录控件成功登录后设置)也存储在您可以从HttpContext.Current.User对象访问的主体中。存储有关用户的信息的另一个位置是名为.ASPXAUTH cookie的cookie。因此,有几个位置可以从中检索用户信息。但是Profile将依赖于IPrincipal类型的对象。对于匿名用户,Peter Mourfield给了你一个很好的答案,所以我不会重复他的话。