电⼦商务⽹站购物车数据的储存⽅式
今天研究了下电⼦商务⽹站购物车数据的储存⽅式,总结如下:
实现购物车的关键在于服务器识别每⼀个⽤户并维持与他们的联系。但是HTTP协议是⼀种“⽆状态(Stateless)”的协议,因⽽服务器不能记住是谁在购买商品,当把商品加⼊购物车时,服务器也不知道购物车⾥原先有些什么,使得⽤户在不同页⾯间跳转时购物车⽆法“随⾝携带”,这都给购物车的实现造成了⼀定的困难。
⽬前购物车的实现主要是通过cookie、session或结合数据库的⽅式。下⾯分析⼀下它们的机制及作⽤。
cookie
cookie是由服务器产⽣,存储在客户端的⼀段信息。它定义了⼀种Web服务器在客户端存储和返回信息的机制,cookie⽂件它包含域、路径、⽣存期、和由服务器设置的变量值等内容。当⽤户以后访问同⼀个Web服务器时,浏览器会把cookie原样发送给服务器。通过让服务器读取原先保存到客户端的信息,⽹站能够为浏览者提供⼀系列的⽅便,例如在线交易过程中标识⽤户⾝份、安全要求不⾼的场合避免⽤户重复输⼊名字和密码、门户⽹站的主页定制、有针对性地投放⼴告等等。利⽤cookie的特性,⼤⼤扩展了WEB应⽤程序的功能,不仅可以建⽴服务器与客户机的联系,因为cookie可以由服务器定制,因此
还可以将购物信息⽣成cookie值存放在客户端,从⽽实现购物车的功能。⽤基于cookie的⽅式实现服务器与浏览器之间的会话或购物车,有以下特点:
1. cookie存储在客户端,且占⽤很少的资源,浏览器允许存放300个cookie,每个cookie的⼤⼩为4KB,⾜以满⾜购物车的要求,同时也减轻了服务器的负
荷;
2. cookie为浏览器所内置,使⽤⽅便。即使⽤户不⼩⼼关闭了浏览器窗⼝,只要在cookie定义的有效期内,购物车中的信息也不会丢失;
3.  cookie不是可执⾏⽂件,所以不会以任何⽅式执⾏,因此也不会带来病毒或攻击⽤户的系统;
4. 基于cookie的购物车要求⽤户浏览器必须⽀持并设置为启⽤cookie,否则购物车则失效;
5. 存在着关于cookie侵犯访问者隐私权的争论,因此有些⽤户会禁⽌本机的cookie功能。
session
session是实现购物车的另⼀种⽅法。session提供了可以保存和跟踪⽤户的状态信息的功能,使当前
⽤户在session中定义的变量和对象能在页⾯之间共享,但是不能为应⽤中其他⽤户所访问,它与cookie最重⼤的区别是,session将⽤户在会话期间的私有信息存储在服务器端,提⾼了安全性。在服务器⽣成session 后,客户端会⽣成⼀个sessionid识别号保存在客户端,以保持和服务器的同步。这个sessionid是只读的,如果客户端禁⽌cookie功能,session会通过在URL中附加参数,或隐含在表单中提交等其他⽅式在页⾯间传送。因此利⽤session实施对⽤户的管理则更为安全、有效。
同样,利⽤session也能实现购物车,这种⽅式的特点是:
1. session⽤新的机制保持与客户端的同步,不依赖于客户端设置;
2. 与cookie相⽐,session是存储在服务器端的信息,因此显得更为安全,因此可将⾝份标⽰,购物等信息存储在session中;定制网站
3.  session会占⽤服务器资源,加⼤服务器端的负载,尤其当并发⽤户很多时,会⽣成⼤量的session,影响服务器的性能;
4. 因为session存储的信息更敏感,⽽且是以⽂件形式保存在服务器中,因此仍然存在着安全隐患。
结合数据库的⽅式
这也是⽬前较普遍的模式,在这种⽅式中,数据库承担着存储购物信息的作⽤,session或cookie则⽤来跟踪⽤户。这种⽅式具有以下特点:
1. 数据库与cookie分别负责记录数据和维持会话,能发挥各⾃的优势,使安全性和服务器性能都得到了提⾼;
2. 每⼀个购物的⾏为,都要直接建⽴与数据库的连接,直⾄对表的操作完成后,连接才释放。当并发⽤户很多时,会影响数据库的性能,因此,这对数据库
的性能提出了更⾼的要求;
3. 使cookie维持会话有赖客户端的⽀持。
各种⽅式的选择:
虽然cookie可⽤来实现购物车,但必须获得浏览器的⽀持,再加上它是存储在客户端的信息,极易被获取,所以这也限制了它存储更多,更重要的信息。所以⼀般cookie只⽤来维持与服务器的会话,例如国内最⼤的当当⽹络书店就是⽤cookie保持与客户的联系,但是这种⽅式最⼤的缺点是如果客户端不⽀持cookie就会使购物车失效。
Session 能很好地与交易双⽅保持会话,可以忽视客户端的设置。在购物车技术中得到了⼴泛的应⽤。但session的⽂件属性使其仍然留有安全隐患。
结合数据库的⽅式虽然在⼀定程度上解决了上述的问题,但从上⾯的例⼦可以看出:在这种购物流程中涉及到对数据库表的频繁操作,尤其是⽤户每选购⼀次商
品,都要与数据库进⾏连接,当⽤户很多的时候就加⼤了服务器与数据库的负荷。
根据每个⽹站实际情况,⼀般需要考虑以下情况:
1、登录前,往购物车添加了商品,商品数据该保存在哪?cookie or 会话⽅式?
2、登录后,往购物车添加了商品,商品数据该保存在哪?cookie or 会话⽅式 or 数据库?保存多久?
3、未登录状态下往购物车添加了商品,保存⽅式为A,后来登录了,保存⽅式为B。A和B应该是怎样⼀种关系。⽤户退出登录后A和B⼜怎样⼀种关系、怎样⼀种处理逻辑?
4、如果在使⽤cookie保存数据,假设⽤户浏览器禁⽤了cookie,如何处理?
5、假设⽤cookie保存数据,什么情况下cookie保存的数据会被系统清除(注意是系统⽽不是⼈为)?
6、假设⽤数据库保存购物车数据,什么情况下数据库保存的数据会被系统清除?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。