asp.net采用cookie+数据库方式实现购物车功能分析
2014-12-24 22:30
399 查看
asp.net采用cookie+数据库方式实现购物车功能分析
asp.net采用cookie+数据库方式实现购物车功能分析,购物车是电子商务平台的一种重要功能,指的是应用于网店的在线购买功能,它类似于超市购物时使用的推车或篮子,可以暂时把挑选商品放入购物车、删除或更改购买数量,并对多个商品进行一次结款,是网上商店里的一种快捷购物工具。网站购物车的作用和现实中的超市购物车一样,随意添加,删除,修改商品数量,方便购物者选好商品后一次性付款结账。
购物车的功能应该包括以下几项:
1.把商品添加到购物车(订购)
2.删除购物车中已订购的商品、
3.修改购物车中某一商品的订购数量
4.清空购物车
5.显示购物车中商品的清单及数量、价格
购物车实现方式一般主要通过cookie,session或结合数据库;
从我分析国内大型商务网站,如淘宝,当当等,当用户未登录的时候是使用cookie存数据的,当用户登录了之后,都存到了与用户对应的数据库。当一个顾客把它选中的产品加入购物车后,产品就会暂时存储在网站购物车里,顾客可以继续选择其它产品,一直到付款提交订单。在未提交订单前购物车内的商品可以保存一定的时间如30、60天等。
现在一些网上说购物车是个临时存储数据的模块,可以将其存放在Session对象中,个人感觉用session存购物信息只能说是学校学习老师让练习时做的,只能说用它做个玩玩,实际开发中基本上是不会用它的,如果大家都将其存储在Session对象中,成千上万个用户一同购物的话,想必服务器必将承受巨大的负载,影响服务器的性能。而且Session是有有效期的,
根据服务器的设置不同而不一样长, 如果你在购物的过程中Session超时了, 那么购物车中的东西就会全没了。
而使用数据库存取,在这种购物流程中涉及到对数据库表的频繁操作,尤其是用户每选购一次商品,都要与数据库进行连接,当用户很多的时候就加大了服务器与数据库的负荷。那么用户选择商品的时候就很有可能频繁更新数据库,增加数据库的负担。所以个人感觉,在商业网站的购物车设计上,最好使用cookie+数据库方式来存取数据。而且放到购物车里的商品,一般都是有购买意向的商品,但并不一定会成为真实的订单,这时候,保留这份数据,对数据挖掘、业务分析有至关重要的作用,所以如果有条件,最好把这些数据也存入数据库的。
当然,使用cookie也是有缺点的,cookie是由服务器产生,存储在客户端的一段信息。大多数浏览器支持最大为 4096 字节的 Cookie。由于这限制了 Cookie 的大小,最好用 Cookie 来存储少量数据,或者存储用户 ID 之类的标识符。
浏览器还限制站点可以在用户计算机上存储的
Cookie 的数量。大多数浏览器只允许每个站点存储 20 个 Cookie;如果试图存储更多 Cookie,则最旧的 Cookie 便会被丢弃。有些浏览器还会对它们将接受的来自所有站点的 Cookie 总数作出绝对限制,通常为 300 个。
基于cookie的购物车要求用户浏览器必须支持并设置为启用cookie,否则购物车则失效;
在使用cookie存数据的时候,一个重要的问题就是cookie不能存数组,对象。只能存字符串。所以在存数据的时候需要把购物车中的数据转换成字符串形式存入cookie中,需要的时候再还原加载入购物车。
以下是我使用DataTable虚拟表存入cookie的方法:
public static DataTable dt;
02 /// <summary>
03 /// 创建虚拟表
04 /// </summary>
05 protected void BuildDataTables()
06 {
07 dt
= new DataTable("Product");//新建一张商品表,表名为"Product"
08 dt.Columns.Add(new
DataColumn("ProductID")); //商品编号
09 dt.Columns.Add(new
DataColumn("ProductName")); //商品名称
10 dt.Columns.Add(new
DataColumn("quantity")); //购买数量
11 dt.Columns.Add(new
DataColumn("totalPrice")); //商品总价
12 dt.Columns.Add(new
DataColumn("Price")); //商品单价
13 dt.PrimaryKey
= new DataColumn[] { dt.Columns["ProductID"] }; //设置主键为ProductID
14
15 }
16 /// <summary>
17 /// 把虚拟表中的商品编号和购买数量转换成字符串并写入cookie
18 /// </summary>
19 protected void WriteInCookie()
20 {
21 string
str = "";
22 foreach
(DataRow row in dt.Rows)
23 {
24 str
= row["ProductID"] + "|" + row["quantity"] + "," + str;
25 }
26 str
= str.TrimEnd(',');
27
28 //往购物车中添加商品
29 HttpCookie
aCookie = null;
30 if
(HttpContext.Current.Request.Cookies["ShoppingCart"] == null)
31 {
32 //如果Cookies中不存在ShoppingCart,则创建
33 aCookie
= new HttpCookie("ShoppingCart");
34 }
35 else
36 {
37 //如果Cookies中存在ShoppingCart,则清空
38 aCookie
= HttpContext.Current.Request.Cookies["ShoppingCart"];
39 aCookie.Value
= null;
40
41 }
42 aCookie.Value
= str;
43 //设置cookie有效期为1天
44 aCookie.Expires
= DateTime.Now.AddDays(1);
45 HttpContext.Current.Response.Cookies.Add(aCookie);
46 }
47 /// <summary>
48 /// 从cookie中取出数据填充到虚拟表中
49 /// </summary>
50 protected void ReadCookie()
51 {
52 if
(HttpContext.Current.Request.Cookies["ShoppingCart"] != null)
53 {
54 dt
= null;
55 BuildDataTables();
56 //如果Cookies中存在ShoppingCart,则取出数据添加到Datatable中
57 HttpCookie
aCookie = HttpContext.Current.Request.Cookies["ShoppingCart"];
58
59 string
cart = aCookie.Value;
60
61 string[]
arr = cart.Split(',');
62
63 for
(int i = 0; i < arr.Length; i++)
64 {
65 string[]
str = arr[i].Split('|');
66 AddDatatable(Convert.ToInt32(str[0]),
Convert.ToInt32(str[1]));
67 }
68 }
69 }
70 /// <summary>
71 /// 往虚拟表中添加数据
72 /// </summary>
73 /// <param name="ProductID">商品编号</param>
74 /// <param name="Quantity">购买数量</param>
75 public void AddDatatable(int ProductID, int Quantity)
76 {
77 //按照产品编号查询所有产品信息
78 product
prod = new ProductInfo().GetProductByProductId(ProductID)[0];
79
80 //新建一行数据
81 DataRow
dr = dt.NewRow();
82 dr["ProductID"]
= ProductID;
83 dr["ProductName"]
= prod.productName;
84 dr["quantity"]
= Quantity;
85 dr["Price"]
= prod.price;
86 dr["totalPrice"]
= Quantity * prod.price;
87 //将这一行数据添加到虚拟表中
88 dt.Rows.Add(dr);
89 }
asp.net采用cookie+数据库方式实现购物车功能分析,购物车是电子商务平台的一种重要功能,指的是应用于网店的在线购买功能,它类似于超市购物时使用的推车或篮子,可以暂时把挑选商品放入购物车、删除或更改购买数量,并对多个商品进行一次结款,是网上商店里的一种快捷购物工具。网站购物车的作用和现实中的超市购物车一样,随意添加,删除,修改商品数量,方便购物者选好商品后一次性付款结账。
购物车的功能应该包括以下几项:
1.把商品添加到购物车(订购)
2.删除购物车中已订购的商品、
3.修改购物车中某一商品的订购数量
4.清空购物车
5.显示购物车中商品的清单及数量、价格
购物车实现方式一般主要通过cookie,session或结合数据库;
从我分析国内大型商务网站,如淘宝,当当等,当用户未登录的时候是使用cookie存数据的,当用户登录了之后,都存到了与用户对应的数据库。当一个顾客把它选中的产品加入购物车后,产品就会暂时存储在网站购物车里,顾客可以继续选择其它产品,一直到付款提交订单。在未提交订单前购物车内的商品可以保存一定的时间如30、60天等。
现在一些网上说购物车是个临时存储数据的模块,可以将其存放在Session对象中,个人感觉用session存购物信息只能说是学校学习老师让练习时做的,只能说用它做个玩玩,实际开发中基本上是不会用它的,如果大家都将其存储在Session对象中,成千上万个用户一同购物的话,想必服务器必将承受巨大的负载,影响服务器的性能。而且Session是有有效期的,
根据服务器的设置不同而不一样长, 如果你在购物的过程中Session超时了, 那么购物车中的东西就会全没了。
而使用数据库存取,在这种购物流程中涉及到对数据库表的频繁操作,尤其是用户每选购一次商品,都要与数据库进行连接,当用户很多的时候就加大了服务器与数据库的负荷。那么用户选择商品的时候就很有可能频繁更新数据库,增加数据库的负担。所以个人感觉,在商业网站的购物车设计上,最好使用cookie+数据库方式来存取数据。而且放到购物车里的商品,一般都是有购买意向的商品,但并不一定会成为真实的订单,这时候,保留这份数据,对数据挖掘、业务分析有至关重要的作用,所以如果有条件,最好把这些数据也存入数据库的。
当然,使用cookie也是有缺点的,cookie是由服务器产生,存储在客户端的一段信息。大多数浏览器支持最大为 4096 字节的 Cookie。由于这限制了 Cookie 的大小,最好用 Cookie 来存储少量数据,或者存储用户 ID 之类的标识符。
浏览器还限制站点可以在用户计算机上存储的
Cookie 的数量。大多数浏览器只允许每个站点存储 20 个 Cookie;如果试图存储更多 Cookie,则最旧的 Cookie 便会被丢弃。有些浏览器还会对它们将接受的来自所有站点的 Cookie 总数作出绝对限制,通常为 300 个。
基于cookie的购物车要求用户浏览器必须支持并设置为启用cookie,否则购物车则失效;
在使用cookie存数据的时候,一个重要的问题就是cookie不能存数组,对象。只能存字符串。所以在存数据的时候需要把购物车中的数据转换成字符串形式存入cookie中,需要的时候再还原加载入购物车。
以下是我使用DataTable虚拟表存入cookie的方法:
public static DataTable dt;
02 /// <summary>
03 /// 创建虚拟表
04 /// </summary>
05 protected void BuildDataTables()
06 {
07 dt
= new DataTable("Product");//新建一张商品表,表名为"Product"
08 dt.Columns.Add(new
DataColumn("ProductID")); //商品编号
09 dt.Columns.Add(new
DataColumn("ProductName")); //商品名称
10 dt.Columns.Add(new
DataColumn("quantity")); //购买数量
11 dt.Columns.Add(new
DataColumn("totalPrice")); //商品总价
12 dt.Columns.Add(new
DataColumn("Price")); //商品单价
13 dt.PrimaryKey
= new DataColumn[] { dt.Columns["ProductID"] }; //设置主键为ProductID
14
15 }
16 /// <summary>
17 /// 把虚拟表中的商品编号和购买数量转换成字符串并写入cookie
18 /// </summary>
19 protected void WriteInCookie()
20 {
21 string
str = "";
22 foreach
(DataRow row in dt.Rows)
23 {
24 str
= row["ProductID"] + "|" + row["quantity"] + "," + str;
25 }
26 str
= str.TrimEnd(',');
27
28 //往购物车中添加商品
29 HttpCookie
aCookie = null;
30 if
(HttpContext.Current.Request.Cookies["ShoppingCart"] == null)
31 {
32 //如果Cookies中不存在ShoppingCart,则创建
33 aCookie
= new HttpCookie("ShoppingCart");
34 }
35 else
36 {
37 //如果Cookies中存在ShoppingCart,则清空
38 aCookie
= HttpContext.Current.Request.Cookies["ShoppingCart"];
39 aCookie.Value
= null;
40
41 }
42 aCookie.Value
= str;
43 //设置cookie有效期为1天
44 aCookie.Expires
= DateTime.Now.AddDays(1);
45 HttpContext.Current.Response.Cookies.Add(aCookie);
46 }
47 /// <summary>
48 /// 从cookie中取出数据填充到虚拟表中
49 /// </summary>
50 protected void ReadCookie()
51 {
52 if
(HttpContext.Current.Request.Cookies["ShoppingCart"] != null)
53 {
54 dt
= null;
55 BuildDataTables();
56 //如果Cookies中存在ShoppingCart,则取出数据添加到Datatable中
57 HttpCookie
aCookie = HttpContext.Current.Request.Cookies["ShoppingCart"];
58
59 string
cart = aCookie.Value;
60
61 string[]
arr = cart.Split(',');
62
63 for
(int i = 0; i < arr.Length; i++)
64 {
65 string[]
str = arr[i].Split('|');
66 AddDatatable(Convert.ToInt32(str[0]),
Convert.ToInt32(str[1]));
67 }
68 }
69 }
70 /// <summary>
71 /// 往虚拟表中添加数据
72 /// </summary>
73 /// <param name="ProductID">商品编号</param>
74 /// <param name="Quantity">购买数量</param>
75 public void AddDatatable(int ProductID, int Quantity)
76 {
77 //按照产品编号查询所有产品信息
78 product
prod = new ProductInfo().GetProductByProductId(ProductID)[0];
79
80 //新建一行数据
81 DataRow
dr = dt.NewRow();
82 dr["ProductID"]
= ProductID;
83 dr["ProductName"]
= prod.productName;
84 dr["quantity"]
= Quantity;
85 dr["Price"]
= prod.price;
86 dr["totalPrice"]
= Quantity * prod.price;
87 //将这一行数据添加到虚拟表中
88 dt.Rows.Add(dr);
89 }
相关文章推荐
- asp.net采用cookie+数据库方式实现购物车功能分析
- 要用asp.net和sql server做一个购物网站,如何实现购物车功能啊?
- 在ASP.NET MVC实现购物车,尝试一种不同于平常的购物车显示方式
- [转]自定义ASP.NET AJAX拖放功能示例程序:实现IDragSource和IDropTarget接口将商品拖放至购物车中
- ASP.NET购物车实现分析
- ASP.NET实现HTTP方式获取功能
- asp.net通过cookie简单实现购物车功能
- ASP.NET 2.0实现类似QQ邮箱中‘HTML方式查看’功能查看Office文件
- asp.net购物车实现-------结合数据库的方式
- ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)
- asp.net购物车实现-------结合session方式
- ASP.NET实现HTTP方式获取功能
- ASP.NET用GridView控件实现购物车功能
- ASP.NET MVC使用中转站方式获取code实现微信登录,分享功能
- 自定义ASP.NET AJAX拖放功能示例程序:实现IDragSource和IDropTarget接口将商品拖放至购物车中
- ASP.NET实现HTTP方式获取功能
- 怎样用asp.net实现简单的查询功能
- Asp.net(C#)实现验证码功能
- ASP.NET中实现类似MSN消息提示功能
- ASP.NET Forums N层架构实现,以功能举例