asp.net购物车 参考链接

  1. http://www.cnblogs.com/dingxue/archive/2008/11/16/1334367.html
  2. http://q.cnblogs.com/q/20849/

3.

[转载]ASP.NET 购物车功能分析及实现

最近学习做购物车,所以把我在学习购物车功能实现的一些体会整理下来。
购物车是电子商务平台的一种重要功能,指的是应用于网店的在线购买功能,它类似于超市购物时使用的推车或篮子,可以暂时把挑选商品放入购物车、删除或更改购买数量,并对多个商品进行一次结款,是网上商店里的一种快捷购物工具。网站购物车的作用和现实中的超市购物车一样,随意添加,删除,修改商品数量,方便购物者选好商品后一次性付款结账。
购物车的功能应该包括以下几项:
     把商品添加到购物车(订购)
     删除购物车中已订购的商品、
     修改购物车中某一商品的订购数量
     清空购物车
     显示购物车中商品的清单及数量、价格
购物车实现方式一般主要通过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的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
public static DataTable dt;  
/// <summary>  
/// 创建虚拟表  
/// </summary>   
protected void BuildDataTables()  
{  
     dt = new DataTable( "Product" ); //新建一张商品表,表名为"Product"  
     dt.Columns.Add( new DataColumn( "ProductID" ));    //商品编号  
     dt.Columns.Add( new DataColumn( "ProductName" ));  //商品名称  
     dt.Columns.Add( new DataColumn( "quantity" ));     //购买数量  
     dt.Columns.Add( new DataColumn( "totalPrice" ));   //商品总价  
     dt.Columns.Add( new DataColumn( "Price" ));        //商品单价  
     dt.PrimaryKey = new DataColumn[] { dt.Columns[ "ProductID" ] }; //设置主键为ProductID  
   
}   
/// <summary>  
/// 把虚拟表中的商品编号和购买数量转换成字符串并写入cookie  
/// </summary>   
protected void WriteInCookie()  
{  
     string str = "" ;  
     foreach (DataRow row in dt.Rows)  
     {  
         str = row[ "ProductID" ] + "|" + row[ "quantity" ] + "," + str;  
     }  
     str = str.TrimEnd( ',' );  
   
     //往购物车中添加商品  
     HttpCookie aCookie = null ;  
     if (HttpContext.Current.Request.Cookies[ "ShoppingCart" ] == null )  
     {  
         //如果Cookies中不存在ShoppingCart,则创建  
         aCookie = new HttpCookie( "ShoppingCart" );  
     }  
     else 
     {  
         //如果Cookies中存在ShoppingCart,则清空  
         aCookie = HttpContext.Current.Request.Cookies[ "ShoppingCart" ];  
         aCookie.Value = null ;  
   
     }  
     aCookie.Value = str;  
     //设置cookie有效期为1天  
     aCookie.Expires = DateTime.Now.AddDays(1);  
     HttpContext.Current.Response.Cookies.Add(aCookie);  
}  
/// <summary>  
/// 从cookie中取出数据填充到虚拟表中  
/// </summary>  
protected void ReadCookie()  
{  
     if (HttpContext.Current.Request.Cookies[ "ShoppingCart" ] != null )  
     {  
         dt = null ;  
         BuildDataTables();  
         //如果Cookies中存在ShoppingCart,则取出数据添加到Datatable中  
         HttpCookie aCookie = HttpContext.Current.Request.Cookies[ "ShoppingCart" ];  
   
         string cart = aCookie.Value;  
   
         string [] arr = cart.Split( ',' );  
   
         for ( int i = 0; i < arr.Length; i++)  
         {  
             string [] str = arr[i].Split( '|' );  
             AddDatatable(Convert.ToInt32(str[0]), Convert.ToInt32(str[1]));  
         }  
     }  
}  
/// <summary>  
/// 往虚拟表中添加数据  
/// </summary>  
/// <param name="ProductID">商品编号</param>  
/// <param name="Quantity">购买数量</param>  
public void AddDatatable( int ProductID, int Quantity)  
{  
     //按照产品编号查询所有产品信息  
     product prod = new ProductInfo().GetProductByProductId(ProductID)[0];  
   
     //新建一行数据  
     DataRow dr = dt.NewRow();  
     dr[ "ProductID" ] = ProductID;  
     dr[ "ProductName" ] = prod.productName;  
     dr[ "quantity" ] = Quantity;  
     dr[ "Price" ] = prod.price;  
     dr[ "totalPrice" ] = Quantity * prod.price;  
     //将这一行数据添加到虚拟表中  
     dt.Rows.Add(dr);  
}           
 
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值