时间:2022-06-21 02:21:33
摘要:针对使用电子商务网站系统时,大多数用户喜欢匿名浏览商品,部分用户可能会选择一些商品直到结帐时才登陆以确认身份,此时将会涉及到将匿名用户的数据迁移到登陆用户数据的问题。提出使用Profile保存用户数据,以及由匿名用户转变为登录用户过程中购物车迁移的程序实现方法。
关键词:Profile;匿名用户;登录用户;购物车迁移
中图分类号:TP393文献标识码:A文章编号文章编号:1672-7800(2013)012-0147-03
作者简介:樊光辉(1973- ),男,工程硕士,无锡科技职业学院软件系讲师,研究方向为软件工程。
0引言
在电子商务系统中经常用到购物车模块,匿名用户或登录用户通过购物车模块选购个人所需商品。本文首先介绍了Profile的基本概念,接着阐述如何使用profile来保存用户购物车信息,以及由匿名用户转变为登录用户过程中购物车迁移的程序实现方法。
1Profile简介
Profile是2.0中提供给用户进行个性化设置的一种方法。Profile与Session一样都能实现用户数据的保存,不同之处在于Session不能永久保存数据,网站关闭后Session中的数据将丢失,而profile能将用户数据永久性保存 [1]。
Profile与MemberShip的区别是它克服了MemberShip只能保存有限数据信息的限制,Profile不仅能保存简单的数据类型,也能保存复杂的数据类型。Profile与MemberShip保存用户数据的机制都需要借助于它们的Provider来完成,为此在使用Profile之前需要在web.config文件中对Profile进行相应的配置[2,3]。
2Profile在Web.config文件中的配置
我们将通过下面的代码示例来说明如何在web.config文件中配置节,以启动该功能。
配置信息说明如下:
(1)节存在于web.config文件的配置节中。
(2) 属性enabled ="true"表示启用profile的功能,属性automaticSaveEnabled="true"表示将自动保存profile信息[4]。
(3) connectionStringName属性是保存profile信息的数据库链接字符串,此属性的信息需在web.config文件的配置节中设置,connectionStringName属性的值来自于此配置节[5]。
(4) 节用来配置用户需要保存的个性化信息的字段名称及字段类型(默认为字符串类型)与保存数据的方式。
3通过编程对Profile用户信息进行读写
以上面的Profile配置信息为例对用户信息进行读写:
读取Profile中的用户信息,并显示在文本框中:
txtAge.Text = Profile.Age.ToString();
txtNick.Text = Profile.NickName.ToString();
将文本框中的用户信息保存于Profile中:
Profile.Age=Convert.ToInt32(txtAge.Text);
Profile.NickName = txtNick.Text;
Profile是一种强数据类型,在读写操作时需要进行适当的数据类型转化。由于在web.config文件中已经设置了Profile 的自动保存功能,所以就不需要再调用Profile的Save()方法来显式地保存数据,页面自动将收集到的数据赋值给Profile的各个属性,Profile对象自身负责和数据库的交互。
4使用Profile保存用户购物车信息
了解了Profile的工作原理与读写方法后,我们将进一步通过购物车的实例,掌握Profile的应用。
4.1使用DataSet作为购物车的数据类型
购物车中的数据以表格形式进行存储,这里我们使用DataSet作为购物车的数据类型,是基于DataSet本身就具备了基于二进制或XML的序列化,所以使用它作为购物车的数据类型减少了开发程序的复杂性。
4.2在DataSet中创建数据表
购物车中一般包括的字段有:商品ID(ProductID)、商品名称(Name)、商品价格(Price)、购买数量(Amout)、购买时间(BuyDateTime)等。具体步骤为:
①在网站中新建数据集文件DataSetCart.xsd;
②在数据集文件中添加购物车数据表ShoppingCart;
③在数据表ShoppingCart中添加上述购物车字段,并正确设置字段类型;
④将商品ID(ProductID)设置为表的主键。这一点非常重要,当设置主键后系统将自动生成FindByProductId方法,此方法用于按主键来查找购物车信息,后面的程序将有用;
⑤在web.config文件中添加如下数据类型的配置信息:
4.3保存购物车信息的主要相关代码
protected void btnSave_Click(object sender, EventArgs e)
{
int id=int.Parse(txtID.Text);
string name = txtName.Text;
double price = double.Parse(txtPrice.Text);
int amount = int.Parse(txtAmount.Text);
DateTime date = DateTime.Now;
DataSetCart cart = this.Profile.ShoppCart;
if (cart==null)
{
cart = new DataSetCart();
}
var existingProduct = cart.ShoppingCart.FindByProductId(id);
if (existingProduct==null)
{
cart.ShoppingCart.AddShoppingCartRow(id, name, price, amount, date);
}
else
{
existingProduct.Amount+=amount;
}
this.Profile.ShoppCart=cart;
}
5实现匿名用户到登录用户的购物车迁移
如何将用户在匿名状态下选购的商品迁移至用户登录状态,首先需要考虑以下问题:
5.1使Profile支持匿名用户访问
Profile在默认情况下只能被登录用户使用,要使匿名用户也能使用Profile,需要在web.config文件中完成两处修改。一处是在web.config文件的节中添加< anonymousIdentification>元素,有了这个元素,系统就会自动为匿名用户生成唯一的ID。另一处是为Profile属性添加allowAnonymous特性,该特性决定profile属性是否允许被匿名用户使用。修改后的配置如下:。
5.2由匿名用户转变为登录用户时激发的事件
在2.0中为我们提供了MigrateAnonymous事件,此事件属于System.Web.Profile.ProfileModule 的成员,该事件在匿名用户登录时被激活。
5.3在程序中注册该事件
在web应用程序中有一个全局的应用程序类Global,为此我们可以在Global.asax文件中注册此事件,事件代码定义如下:
void Profile_MigrateAnonymous(object sender, System.Web.Profile.ProfileMigrateEventArgs e)
5.4编写事件过程
考虑清楚以上问题后,剩下的任务就是编写事件过程,分为以下几个步骤完成:
(1)获取匿名用户与登录用户的Profile:
var loginedProfile=e.Context.Profile as ProfileCommon; ;
var AnonymousPrlfile = ProfileBase.Create(e.AnonymousID) as ProfileCommon;
(2)将匿名用户与登录用户的购物车信息进行合并:
if (loginedProfile.ShoppCart == null)
{
loginedProfile.ShoppCart = AnonymousPrlfile.ShoppCart;
}
else
{
foreach (var item in AnonymousPrlfile.ShoppCart.ShoppingCart)
{
var row = loginedProfile.ShoppCart.ShoppingCart.FindByProductId(item.ProductId);
if (row == null)
{
loginedProfile.ShoppCart.ShoppingCart.AddShoppingCartRow(item.ProductId, item.Name, item.Price, item.Amount, DateTime.Now);
}
else
{
row.Amount += item.Amount;
}
}
}
HttpContext.Current.Profile.Save();
(3)清除当前匿名用户的购物车信息:
System.Web.Profile.ProfileManager.DeleteProfile(e.AnonymousID);
(4)清除当前匿名用户的cookie信息:
System.Web.Security.AnonymousIdentificationModule.ClearAnonymousIdentifier();
(5)清除user 表中的匿名用户信息:
System.Web.Security.Membership.DeleteUser(e.AnonymousID,true);
6结语
上述程序代码在VS2010+SQL2010环境下调试通过,通过测试系统运行效率高,性能稳定。但在设计过程中可能还存在许多待改进之处,希望感兴趣的读者能继续研究,充分挖掘Profile在用户配置信息管理方面的优势,使系统的安全性等多方面性能得到进一步优化。
参考文献参考文献:
[1]张建华.网络购物顾客满意度的影响因素[J].郑州航空工业管理学院学报,2012,30(1):67-70.
[2]王宇.基于ASP的电子商务网站中购物车设计与实现[J].电脑知识与技术,2011,7(21):5120-5121.
[3]刘静.基于的小型电子商务网站设计与实现[J].现代计算机:专业版,2010(5):156-159.
[4]张恒静.基于技术在线购物系统的设计与实现[D].成都:电子科技大学,2011.
[5]顾悦.基于的购物系统设计与实现[D].上海:华东师范大学,2010.