实现购物车的原理

     购物车的功能包括以下几项:

n         把商品添加到购物车,即订购

n         删除购物车中已定购的商品

n         修改购物车中某一本图书的订购数量

n         清空购物车

n         显示购物车中商品清单及数量、价格

     实现购物车的关键在于服务器识别每一个用户并维持与他们的联系。但是HTTP协议是一种“无状态(Stateless)”的协议,因而服务器不能记住是谁在购买商品,当把商品加入购物车时,服务器也不知道购物车里原先有些什么,使得用户在不同页面间跳转时购物车无法“随身携带”,这都给购物车的实现造成了一定的困难。

     目前购物车的实现主要是通过cookie、session或结合数据库的方式。下面分析一下它们的机制及作用。

1. cookie

     cookie是由服务器产生,存储在客户端的一段信息。它定义了一种Web服务器在客户端存储和返回信息的机制,cookie文件它包含域、路径、生存期、和由服务器设置的变量值等内容。当用户以后访问同一个Web服务器时,浏览器会把cookie原样发送给服务器。通过让服务器读取原先保存到客户端的信息,网站能够为浏览者提供一系列的方便,例如在线交易过程中标识用户身份、安全要求不高的场合避免用户重复输入名字和密码、门户网站的主页定制、有针对性地投放广告等等。利用cookie的特性,大大扩展了WEB应用程序的功能,不仅可以建立服务器与客户机的联系,因为cookie可以由服务器定制,因此还可以将购物信息生成cookie值存放在客户端,从而实现购物车的功能。用基于cookie的方式实现服务器与浏览器之间的会话或购物车,有以下特点:

n         cookie存储在客户端,且占用很少的资源,浏览器允许存放300个cookie,每个cookie的大小为4KB,足以满足购物车的要求,同时也减轻了服务器的负荷;

n         cookie为浏览器所内置,使用方便。即使用户不小心关闭了浏览器窗口,只要在cookie定义的有效期内,购物车中的信息也不会丢失;

n         cookie不是可执行文件,所以不会以任何方式执行,因此也不会带来病毒或攻击用户的系统;

n         基于cookie的购物车要求用户浏览器必须支持并设置为启用cookie,否则购物车则失效;

n         存在着关于cookie侵犯访问者隐私权的争论,因此有些用户会禁止本机的cookie功能。

2. session

     session是实现购物车的另一种方法。session提供了可以保存和跟踪用户的状态信息的功能,使当前用户在session中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,它与cookie最重大的区别是,session将用户在会话期间的私有信息存储在服务器端,提高了安全性。在服务器生成session后,客户端会生成一个sessionid识别号保存在客户端,以保持和服务器的同步。这个sessionid是只读的,如果客户端禁止cookie功能,session会通过在URL中附加参数,或隐含在表单中提交等其他方式在页面间传送。因此利用session实施对用户的管理则更为安全、有效。

     同样,利用session也能实现购物车,这种方式的特点是:

n         session用新的机制保持与客户端的同步,不依赖于客户端设置;

n         与cookie相比,session是存储在服务器端的信息,因此显得更为安全,因此可将身份标示,购物等信息存储在session中;

n         session会占用服务器资源,加大服务器端的负载,尤其当并发用户很多时,会生成大量的session,影响服务器的性能;

n         因为session存储的信息更敏感,而且是以文件形式保存在服务器中,因此仍然存在着安全隐患。

3. 结合数据库的方式

     这也是目前较普遍的模式,在这种方式中,数据库承担着存储购物信息的作用,session或cookie则用来跟踪用户。这种方式具有以下特点:

n         数据库与cookie分别负责记录数据和维持会话,能发挥各自的优势,使安全性和服务器性能都得到了提高;

n         每一个购物的行为,都要直接建立与数据库的连接,直至对表的操作完成后,连接才释放。当并发用户很多时,会影响数据库的性能,因此,这对数据库的性能提出了更高的要求;

n         使cookie维持会话有赖客户端的支持。

各种方式的选择:

来源:http://hi.baidu.com/l1037/blog/item/9d015328195a3c31d52af17e.html

转载于:https://www.cnblogs.com/studingASPNet/archive/2011/10/27/2226759.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++中virtual关键字的用法

关于virtual关键字的用法总结如下,有错误或者总结不到位的情况请能帮本人指出,非常感谢! Virtual是C OO机制中很重要的一个关键字。只要是学过C的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数。 基类的函数调用如果有virtual则…

很不错的Windows 控件 Developer Express Inc.NET

这个是我用 Developer Express Inc.NET 做的小东东!很漂亮哦~!文件太大了没办法上传,喜欢的可以去 http://www.dnc.com.cn 下载 还有注册机哦! 转载于:https://www.cnblogs.com/xnet/archive/2005/12/21/301768.html

人生中的第一个博客

希望通过这几个月的学习,能够把Python掌握,最起码能够找到一份好的工作,通过自己的努力让代码改变世界!转载于:https://www.cnblogs.com/nandadao/p/9904378.html

助你成为嵌入式高手的100多个软硬件开源项目

大家好,转发一个朋友总结的资料文章,内容如下大家好,我是老温,今天给大家推荐一个嵌入式开源项目汇总的仓库。学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言、…

oracle联合主键怎么找,Oracle数据库联合主键

1、定义:主键:在Oracle中,主键指能唯一标识一条记录的单个数据表列或联合的数据表列(联合主键|复合主键)。主键用到的数据 表列数据不能包含空值。而且,一张表只能包含一个主键。2、作用:数据表的联…

笔记--相册

function moveleft(id)//图片左移 { var d document.getElementById(piclist); a eval(70); d.scrollLeft a; } function moveright()//图片右移 { var d document.getElementById(piclist); a eval(68); d.scrollLeft - a; } function showBigPic(src)…

工作杂感

其实今天算是平淡无奇的一天但不平淡的只是今天又跟老板谈话了年末嘛,谈话总是正常的自然而然谈到年终奖,加工资,待遇等等事先听到风声,知道涨幅分几等当知道自己的涨幅,已经算是公司数一数二的,已不能去反…

C++/C中mutalbe与volatile的详解

1、 mutalbe的中文意思是“可变的,易变的”,跟constant(既C中的const)是反义词。在C中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量(mutable只能由于修饰类的非静态数据成员),将永远处于…

没有mmu可以跑Linux吗?

为什么需要mmu?我们知道应用程序是不能随意访问内存的,如果让应用程序直接访问物理内存,那么计算机是很危险的,计算机内存的所有内容将被完全暴露出来。所以出现了mmu,mmu是内存管理单元,应用程序访问的是虚拟内存&am…

pC机OracLe库磁盘坏如何恢复,电脑硬盘坏了数据能恢复吗(6步教你自己在家轻松恢复数据)...

电脑硬盘毁坏如何恢复数据有过硬盘损坏经历的用户都知道,硬盘损坏其最严重的结果就是导致其中存储的文件难以读取,包括无法复制,无法移动。通常来说,具体的表现形式是复制文件或者传输文件的时候,耗费很长的时间都无法…

又重新让aspspider.net支持中文PDF输出了

经过一番努力,再次看到中文PDF的输出;aspspider.net经过这次更新后,不知道什么原因,使用BaseFont.AddToResourceSearch(MapPath(".\itextsharpasian\") "iTextAsian-1.0.dll");的方法就是不能把iTextAsian-1.…

My new iMac 27

iMac 27 12GB Memory. 用来贴补家用,有需要开发项目的可以与我联系 asp.net、组件开发 ,java,javascript,xml/xslt,objective-c 什么都行. 目前上架产品包括:少儿有声阅读系列《单刀会》《白蛇传》《空城记》,新闻阅读有 “辽宁日报” “辽宁…

url编码函数encodeURI和encodeURIComponent

var url "http://www.wrox.com/illegal value.html#start";encodeURIComponent(url) //"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.html%23start" encodeURI(url) //"http://www.wrox.com/illegal%20value.html#start" 记住2种特殊字符&…

C语言面试题大汇总之华为面试题

该面试题大全可以很好地提高C/C程序员的技术综合实力 1、局部变量能否和全局变量重名?  答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时&#xff0…

从没想过会有一个这样的机会|大疆招聘

我是昨晚才知道,年前有一个读者一直在找工作最近准备入职大疆,之前我也有给他推荐了机会,不过都没有合适的。昨晚突然给我发消息说拿到了大疆的岗位,待遇和职位都是自己喜欢的。我的微信好友有好几个大疆的同学,刚好昨…

oracle不同session共享变量,SpringMVC使用oracle配置session共享

简述由于开发是单机项目,但是到了配置负载均衡的集群中就发生了问题,使用账号登录后又跳回主页面。我分析了原因是负载均衡配置的跳转是每次访问都会切换服务,所以在A机器登录后,再次访问B机器找不到有登录状态的session&#xff…

Google Earth 和MS Virtual Earth:虚拟地球简介

自从Goal在98年提出数字地球(Digital Earth)之后,全球掀起了数字地球热,而随着Goal的竞选总统的失利和当时科学技术和硬件水平的限制,数字地球一直处于慢慢发展状态。其中它涉及到很多学科包括地理对象的描述、存储、建…

转些别人收集的歌

2019独角兽企业重金招聘Python工程师标准>>> 【Anaesthesia】Maximilian Hecker强烈推荐 【Summer Days In Bloom】Maximilian Hecker力推! 【end of May】Keren Ann 【gotta have you】The Weepies调调很特别,我用它做过背景音乐。 …

Linux社区关于链表的bug讨论我们要看一下

最近在Linux社区看到一个关于内核链表的讨论原文讨论链接:https://lwn.net/SubscriberLink/885941/01fdc39df2ecc25f/先用例子说明怎么使用内核链表list.h/* SPDX-License-Identifier: GPL-2.0 */ #ifndef LIST_H #define LIST_H/** Copied from include/linux/...*…

多图上传乱序php,discuz图片顺序混乱解决方案_php技巧

说明discuz在发表帖子的时候,添加多张图片,然后直接发表帖子,图片顺序有时候会乱掉即使上传图片窗口中图片顺序正确,发布之后还是会乱掉分析看url,程序代码中看不出什么将图片名改为序号上传,顺序乱了&…