商城购物车实现的两种方式
二者实现区别
目前淘宝进行添加购物车的操作需要登入操作,而京东进行添加购物车无需登入。
仿京东
实现思路:
用户未登入将商品保存在临时购物车中,用户登入后生成当前用户自己的购物车并将存储在临时购物车中的商品进行合并
用户的登入状态判断
举例:通过拦截器中获取当前用户的登入状态,对用户的状态进行判断,如第一次访问商城,我们后台生成一个cookie返回给前端(并将生成的cookie值设置到用户对象中,并且将这个对象存入当前的线程空间中,方便获取),当用户进行购物车添加操作的时候我们以这个cookie作为key(采用redis做购物车)保存数据,如用户未登入却不是第一次访问商城,我们可以获取第一次生成的cookie的值,set到用户对象中并保存到线程空间中,然后根据cookie的值作为key保存商品数据,如用户已经登入我们就采用当前用户的id作为key保存商品信息。
代码:
创建用户详情对象用来保存用户的登入信息
创建一个类实现HandlerInterceptor接口
创建线程对象ThreadLocal用于保存用户的登入信息
在方法执行前获取到用户的信息
因为用户登入后我们将用户的信息存入到了session域当中的,所以我们可以从session中获取到当前的用户信息(采用的是SpringSession,方便跨域存储)如下图所示
对用户对象进行判断
在方法执行后获取到存储在线程空间的用户对象获取到cookie的值设置好cookie返回给前端
添加购物车
实现思路:
在添加商品前,判断用户的登入状态,并根据用户的登入状态去判断使用哪一个购物车(redis做购物车)
注意事项:
先查询当前商品是否存在,存在增加当前商品的数量,不存在对当前商品进行保存。
判断用户状态:
购物车添加:
查询购物车
其他功能后续补充......
仿淘宝
实现思路:
用户必须登入才可以进行购物车的添加操作,未登入时不可以进行购物车的添加操作,并跳转到登入页面。
其他添加购物车功能、查询购物车功能与京东的购物车功能实现差不多。