1.1、session
将购物车直接存放到与用户相关的session中。
优点:
代码实现超级简单。
缺点:
购物车存在session当中,如果session销毁,购物车就没有了。(session只存在于一次会话中。)
用户未登录的时候不能添加购物车。
购物车使用了session,而session是存在于内存资源中,消耗了大量的内存资源。非常不好。
集群情况下,session很难共享,无法进行水平扩展。(tomcat的session广播对资源消耗严重,即tomcat的带宽不干别的了,就去广播了。)
1.2、cookie
将购物车直接存放到浏览器的cookie中。
优点:
在不登陆的情况下也可以添加购物车。
不占用服务端存储空间。
用户体验好。
代码实现简单。
缺点:
cookie中保存的容量有限。最大4k。
cookie占用的是浏览器的缓存,可能用户会定期删除cookie。
把购物车信息保存在cookie中,更换设备购物车信息不能同步。
1.3、cookie+入库 / 直接入库
对于未登陆用户,将购物车放到cookie中,对于已登陆用户将购物车放入数据库中。
将购物车持久化到数据库中。这里的数据库指的是关系型数据库
或者非关系型数据库
。
优点:
关系型数据库:mysql数据库(数据完整性比较好)
非关系型数据库:redis数据库(读写速度快)
缺点:
相对于session和cookie,没啥缺点。
占用服务端资源。
2、购物车实现总结
自己写着玩的代码可以使用cookie+session。
真实场景应该是要使用cookie+入库,或者直接入库。
京东准许未登录状态添加购物车,应该采用的是cookie+入库。
淘宝并不准许用户未登录添加购物车,应该采用的是直接入库。