在接一个电商web项目,发现它购物车是通过服务器端内存实现的
session里存储一个标识,用于关联购物车,购物车对象存储在服务器内存中。这是我第一次做电商的项目,所以也不知道别的电商的购物车一般是怎么实现的。比较好奇我这个项目的做法有什么利弊,属于什么水平,求指点?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
session里存储一个标识,用于关联购物车,购物车对象存储在服务器内存中。这是我第一次做电商的项目,所以也不知道别的电商的购物车一般是怎么实现的。比较好奇我这个项目的做法有什么利弊,属于什么水平,求指点?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(8)
PHP提供的SESSION机制使用简单,但缺点也是很明显的,比如实现购物车功能:
一个在手机上登录的用户,添加了多个商品到购物车.
当这个用户在电脑上登录后,并不能获取购物车里的内容,因为这两次登录生成的PHP SESSION ID是不同的.
所以大多数网站,都是基于COOKIE和数据库实现身份验证和购物车等功能的.
先说身份验证,cookie里存用户ID和密码哈希,验证时根据ID查询数据库的用户密码,经过同样的哈希算法计算后,
跟$_COOKIE里的密码哈希比对,一致则通过认证.然后就可以根据用户ID查询购物车数据表里的商品记录了.
一般都是用cookie实现
iwebshop的吧,用session存很明显用户退出登录购物车就清空了;一般来说最好在数据库里建一张carts表,记住session id,user id,product id和规格产品id,只要用户不删除购物车一直会被保留
感觉缺少持久化和同步机制,还有LRU
利:
实现起来很简单
弊:
内存占用跟访问量成正比,内存占满服务器就拒绝服务了
不能进行集群扩展
必须定时清理过期数据,否则内存会爆
数据也不可靠,要是重新发版本所有用户的购物车就清空了,这也太悲剧了吧!偷懒的做法!
我也会这样去做. 好处是跨客户端.
不过我觉得直接存数据库会更好,用户量大的话怕查询慢可以分库分表. 内存存储数据是为了 cache,比如 memcache,redis 数据都是放在内存(虽然 redis 可以持久化).用来做对高频访问页面或者性能差的处理做缓存, 用来存购物车浪费.
可以考虑这样更改:
1.购物改用cookie实现,集群没啥问题,缺点cookie也有大小限制。
2.存后台的分布式memcache等高性能的nosql,定期清理过期的数据等也需要考虑。