写在前面的话:刚来公司的的时候,老大安排了一个任务,企业站,但是需要实现购物车的功能,以前没做过,所有就向周围的人请教了一下如何实现购物车,自己也在网上搜了一下,有了些自己的认识,于是写了下来

1、实现思路:

在网上查了一下资料,以及向身边请教之后发现,对于网站购物车的实现大体分为三种方法:Session实现、Cookie实现、数据库实现,其实这三种实现,指的只是如何跟踪用户的操作,即用户购买物品,加入购物车,加入了什么物品,加入了多少物品等信息的暂时保存。

这三种方法的不同之处就在于保存用户操作的方式不同,其中Session现在用的不多,由于Session的生命周期,在浏览器关闭时会失效,所以容易使数据丢失,如果用户在浏览网站是不小心关闭了浏览器,当用户再次打开时,加入购物车的物品就会丢失,所以不可取。

Cookie的实现方式是在用户点击加入购物车之后将数据以Cookie的形式存储的客户端,每次用户登录该网站时,首先从Cookie中读取数据出来,这种方式数据库不易丢失,读取速度也快。

数据库的实现方式是最安全的,但是这种方式也是最占用服务器资源的,而且当数据量较大时,会影响服务器响应速度。

2、我选择的方式:

我初步设想是在物品展示页面中做成类似淘宝网、当当网的那种展示页面,在每个物品下面放置一个加入购物车按钮,希望在用户浏览该页面时,点击该按钮将自己喜欢的物品加入购物车。

页面组成:ProductList.aspx、ProductShow.aspx、ShoppingCart.aspx

ProductList.aspx.cs文件

public partial class ProductList : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){// 绑定数据源到Repeater控件
        Bind();}public void Bind(){string sqlStr = "select * from product";rptProductList.DataSource = new BLL().GetDataSet(sqlStr);rptProductList.DataBind();}protected void btnGoCart_Click(object sender, EventArgs e){Response.Redirect("ShoppingCart.aspx");}
}

View Code

此页面的功能是:从后台将数据库已有的商品取出来,并绑定到服务器控件上,展示出来,当用户看到自己喜欢的物品时,点击图片,将会跳转到物品详情页,即ProductShow.aspx页面。

由于自己只是做个测试,所以就用自己最喜欢的动漫人物来做图片了,页面运行效果如图:

ProductShow.aspx.cs文件

public partial class ProductShow : System.Web.UI.Page
{public string id = "";public string picture = "";public string name = "";private Product product = new Product();protected void Page_Load(object sender, EventArgs e){id = Request.QueryString["id"].ToString();picture = Request.QueryString["picture"].ToString();product.Id = this.id;product.Name = this.name;product.Picture = this.picture;}/// <summary>/// 添加数据到cookies/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void btnAddCart_Click(object sender, EventArgs e){Cart cart = new Cart();cart.WriteCookies(product);Response.Redirect("ShoppingCart.aspx");}
}

View Code

此页面的功能是:首先读取从物品展示页面传过来的物品Id和图片地址,之后便将该物品详情展示在页面中,由于只是测试,所以只传了Id和图片地址,我在考虑是如果需要想当当那样的物品详情页那样展示很多信息的话,是该在此页面根据Id从数据库读取呢,还是应该从物品展示页面传过来呢?如果有知道的,还请留言告诉我,先谢过了。

在此页面中有一个加入购物车按钮,当点击该按钮时,会将该物品加入购物车,在此实现是写入Cookie,写入的规则是,购物车是否存在,存在则再先查看Cookie中是否已有该物品,如果有则增加数量即可,如果没有,则在Cookie中新建一个键值对存入Cookie,如果购物车不存在,则先创建购物车即可,下面是购物车类的WriteCookies代码:

#region 写入cookie/// <summary>/// 写入cookie/// </summary>/// <param name="product">商品</param>/// <param name="num">个数</param>/// <param name="expires">有效期</param>public void WriteCookies(Product product, int num = 1, int expires = 15){if (System.Web.HttpContext.Current.Request.Cookies["Cart"] != null){string cookieValue = System.Web.HttpContext.Current.Request.Cookies["Cart"].Value;// 商品不存在if (System.Web.HttpContext.Current.Request.Cookies["Cart"].Values[product.Id.ToString()] == null){cookieValue = cookieValue + "&" + product.Id + "=" + num.ToString();}// 商品存在else{int num1 = int.Parse(System.Web.HttpContext.Current.Request.Cookies["Cart"].Values[product.Id.ToString()].ToString()) + num;System.Web.HttpContext.Current.Request.Cookies["Cart"].Values[product.Id.ToString()] = num1.ToString();cookieValue = System.Web.HttpContext.Current.Request.Cookies["Cart"].Value;}HttpCookie cookie = new System.Web.HttpCookie("Cart", cookieValue);System.Web.HttpContext.Current.Response.AppendCookie(cookie);}// 创建购物车else{HttpCookie cookie = new HttpCookie("Cart");cookie.Values[product.Id.ToString()] = num.ToString();System.Web.HttpContext.Current.Response.Cookies.Add(cookie);System.Web.HttpContext.Current.Response.AppendCookie(cookie);}}#endregion

View Code

当点击加入购物车以后,会写入Cookie,并跳转到购物车页面

ShoppingCart.aspx.cs文件

public partial class ShoppingCart : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){Bind();this.DataBind();}protected void Bind(){Cart cart = new Cart();rptCart.DataSource = cart.ReadCookies();}
}

View Code

此页面的功能只是简单的从Cookie中读取已有数据,并显示在页面上,由于只是简单侧说,所以没有实现从购物车取消购买功能,只是简单的罗列。

运行页面如下:

3、总结:

本文就是简单的描述一下自己对于购物车实现的想法,如果有不对的,还请各位多多指教,由于自己最近才开始练习使用三层架构,因此这个小例子也使用了三层,这样做确实使代码的层次结构很容易理解了。

我简单介绍一下这三个层,是传统的BLL、DAL、Model三层,DAL用来从数据库读取数据,BLL其实没有什么作用,只是为了成为三层,因为这个小例子太简单,没有什么业务逻辑可以处理(不知道自己这样使用三层会不会太生拉硬套了,反正就是想让自己从小例子开始习惯使用三层吧),Model层定义了一个Product类来表示商品,最后定义了一个Cart类,它只是实现了将数据写入CooKie和从Cookie读去数据的功能。到此这个小例子就完全结束了。

写在后面的话:当我思考了许久,才想出购物车的实现思路,结构最后才发现,组长给我的任务是在企业站中实现购物车,而企业站中实现购物的功能大都是以留言的方式是实现的,所以自己的这个方案也没有用上;不过,我也从中学到了很多,学到了面对问题,应该首先自己去思考如何解决问题。

关于网站购物车的实现的思考相关推荐

  1. 利用 jQuery 操作页面元素的方法,实现电商网站购物车页面商品数量的增加和减少操作,要求单项价格和总价随着数量的改变而改变

    查看本章节 查看作业目录 需求说明: 利用 jQuery 操作页面元素的方法,实现电商网站购物车页面商品数量的增加和减少操作,要求单项价格和总价随着数量的改变而改变 当用户单击"+" ...

  2. 电子商务网站购物车设计

    2012-04-10 20:05 19262人阅读 评论(5) 收藏 举报  分类: 电子商务 目录(?)[+] 购物车的实现原理 购物车相当于现实中超市的购物车,不同的是一个是实体车,一个是虚拟车而 ...

  3. 常见b2c网站购物车的设计

    对于大部分B2C网站来说,购物车是网站的咽喉之地,订单是白花花的银子,所有银子都必然流经购物车,购物车不能有失.优秀的购物车设计至少需要完成两项使命:一是方便用户多买货多掏银子:二是帮用户保管好待购的 ...

  4. 关于电商网站购物车功能如何与登录账号相关联的一点想法

    最近在试着做电商网站,自然也需要涉及到实现购物车的功能.然后就想到去用cookie来完成购物车的功能. 实现过程是新建一个cookie,把购物车实体类的list放进去,每次给购物车新增商品和删除商品的 ...

  5. 信息发布类网站后台界面设计一点思考(整体布局)

    源起:做过,也用过一些信息发布系统的后台.特别最近,用的又比较多.曾经觉得,后台要设计的好用,让内容编辑来提意见来设计就好了.但是发现没那么简单. 因为,很多内容编辑,不懂得编程或者美工设计,一个后台 ...

  6. 电子商务B2C网站购物车设计

    购物车是网站的咽喉之地,订单是白花花的银子,所有银子都必然流经购物车,购物车不能有失. 优秀的购物车设计至少需要完成两项使命:一是方便用户多买货多掏银子:二是帮用户保管好待购的货品,方便下次接着掏银子 ...

  7. 电商网站购物车存储方式

    大型电商网站在购物节的时候都会有很高的并发量,购物车模块无疑是访问最多的,那么要如何设计才能扛住并发量呢 1.Session方式: 优点:初期性能好,访问快,保存在服务端,相对比较安全 缺点:对于大型 ...

  8. 学科网站建设的尝试与思考

    近年来,各校在利用计算机技术辅助教学.网络课程的开发等方面做了不少尝试,取得了不少的经验.但是,我们应该看到实际工作中仍然存在不少问题. 首先 课件.网络课程存在重复开发和低水平开发.在教学过程中,教 ...

  9. 由一个网站注册验证码带来的思考

    下面给出一个网站的验证码提示       <script type="text/javascript">         // javascript function  ...

最新文章

  1. FPGA之道(71)提高设计的综合性能(三)提高设计的重用性与易改性
  2. LeetCode Additive Number(递归)
  3. 本地Python连接服务器中的Mysql数据库
  4. 【转】Unity3d:读取FBX中的动画
  5. 本机显示服务器文本信息,打开文档显示云服务器
  6. Git 和 GitHub 教程——版本控制入门
  7. 如果淘宝双十一架构用. Net Core,如何“擒住”高并发、高可用、低延迟?
  8. 亚马逊ec2 实例删除_亚马逊免费使用套餐:在EC2 Linux实例上安装Tomcat 7
  9. linux 上下文切换监控,[Linux] 查看进程的上下文切换pidstat
  10. 《天天数学》连载19:一月十九日
  11. 阿里妈妈大规模在线分层实验实践
  12. 22-微信小程序商城 我的订单(微信小程序商城开发、小程序毕业设计、小程序源代码)(黄菊华-微信小程序开发教程)
  13. 7- 代码段权限检查与 jmp
  14. 2022-2028年全球及中国视频后期制作服务行业投资前景分析
  15. 微信语音聊天内容如何录制 如何录制通话内容
  16. ExifTool 抽取、修改Image tag 信息
  17. matlab 生成hdl,Simulink 用于 HDL 代码生成和验证
  18. Android Studio底部导航
  19. 计算某年某月有多小天
  20. Godaddy域名解析

热门文章

  1. 通过设置代理解决AndroidStudio无法下载gradle问题
  2. 全网最详细的HBase启动以后,HMaster进程启动了,几秒钟以后自动关闭问题的解决办法(图文详解)
  3. 在windows下安装node-sass失败,提示\node-sass: Command failed,解决方案
  4. winform ctrl键单击多选_鼠标各键在CAD中的运用,左右键常用,但滚轮这个功能不一定用过...
  5. 对麦克纳姆轮辊子的理解
  6. 微信公众号数据2019_如何制作微信公众号图文素材 微信公众号采集器好用吗
  7. python 微服务 etcd_python etcd api
  8. 1929. 数组串联
  9. 关于Mysql8.0.26版本与IDEA连接的配置
  10. CSS3盒子模型(CSS3)