使用Profile实现匿名用户购物车迁移研究

时间:2022-06-21 02:21:33

使用Profile实现匿名用户购物车迁移研究

摘要:针对使用电子商务网站系统时,大多数用户喜欢匿名浏览商品,部分用户可能会选择一些商品直到结帐时才登陆以确认身份,此时将会涉及到将匿名用户的数据迁移到登陆用户数据的问题。提出使用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.

上一篇:数据挖掘在学生成绩数据中的应用研究 下一篇:基于Linux系统的远程控制技术研究