网店购物,一般都会有自己的购物车,如同真实的购物流一样,
虚拟购物车无非在于添删改查了。 用户查看商品开始购物: a. insert 商品(购物车空的,没有商品直接放进去) b. update 商品(购物车有的话,num数量增加或减少) c. delete 商品 特殊情况num=1 再减少 => 直接删除 清空的购物车时候 d. show 商品 购物车显示进入订单结算流程有了这个思路,那么肯定就是实现方式问题的选择了,该选择哪种呢,先对比下孰优孰劣吧?
我们都知道http是面向无连接的,或者在购物时服务端是不清楚具体是谁谁在购物操作的,那么在这个过程中就需要一个唯一的’令牌‘ ,谁来给呢?都给购物车设计提出了难题。具体点大概有以下4点 等这些吧(其他的没遇到,欢迎提供其他的解决思路) 1. cookie 2. session 3. cookie、 session+db 4. cookie+memcahe
目前大部分应该就是cookie、session+db 方式吧,也要依赖与cookie维持服务端会话,
但是有一点就是你可以试试(禁掉cookie 你去360buy 或tmail 加下购物车看是否能成功)1. cookie
cookie是由服务器产生存储于pc端的服务端信息且占用很少资源(pc端)不占用服务端资源,查了下资料大概客户端默认的是300个cookie数量每个4kb左右的资源就相当于一个空文件,对购物而已搓搓有余了
但是千万别忘了,cookie是存放在pc端的信息(安全隐患嘛),当购物时会提交给服务端,这中间会出现什么问题呢,你懂的,就是伪造cookie请求数据以假乱真呗,在cookie有效期内虽然你关掉浏览器重启后购物信息任然保存,但是这在不同用户登录同一pc的时候会造成购物车显示问题,明明没有购买却在购物车显示---不信你试试
最致命的一点是,一旦某些客户认为cookie会暴露自己隐私或者其他信息禁用cookie时,对不起,购物车添加不了
2. session
session是服务端的会话,提供了可以保存和跟踪用户的状态信息的功能,使当前用户在session中定义的变量和对象能在页面之间共享且不能为应用中其他用户所访问,session将用户在会话期间的私有信息存储在服务器端,提高了安全性。在服务器生成session后,客户端 会生成一个sessionid识别号保存在客户端,以保持和服务器的同步。这个sessionid是只读的,如果客户端禁止cookie功 能,session会通过在URL中附加参数,或隐含在表单中提交等其他方式在页面间传送。因此利用session实施对用户的管理则更为安全、有效。
虽然session不依赖与客户端设置也比较安全,但是她在服务端保存任然是文件的形式,安全性不说很高,勉强接受吧。
另外,session会占用服务器资源和服务器端的负载,尤其当并发用户很多时,会生成大量的session,影响服务器的性能;如果session放在数据库会影响数据库性能,一旦关闭浏览器重启将清空购物车(我不相信你购物时没遇到过),惊叹,我买的东西那里去啦呀
3. cookie、session+db 我觉得这样较好 也是当下较普遍的方式
db担当存储购物信息的作用,session或cookie则用来跟踪用户购物行为
db和服务端session记录数据和客户行为标识,cookie维持这种标识 哎其实说穿了session就是cookie这样各取所长,发挥优势,有利于安全性和服务点性能的提高和充分利用
但是还是要说下: 1. cookie 的加入使购物依赖于客户端设置 2. 每次购物都有session 和db的参与,这增加了数据库和服务器端的资源消耗, 而且并发量大的时候可想而知了,等着转圈圈吧甚至你懂的 3. 不管怎样,但是这种方式是的用户购物行为得以保存,即使你换做不同的pc登录, 你的购物车依然是你的,真TM人性化 呵呵4. cookie+memcache 这也是比较流行的一种方式啦
服务端用memcache替换db作用与记录和跟踪,只是这种方式只是暂时的或短暂的存储用户购物车信息啦,如一旦memcache过期或者重启或者资源不够暴了,那么对不起,购物信息也没用了
利用下班时间整理的咚咚,有不足的请指正,谢谢