电商项目购物车模块,要求用户在非登录情况下也可将商品加入购物车,因此设计如下:
1.如果添加购物车时,用户已经登录,则将购物车数据储存到redis和数据库中,而且数据要保持一致,用户查询时从redis中获取;
2.如果添加购物车时,用户未登录,则将购物车数据添加到cookie中,查询、修改和删除也在cookie中进行;如果用户登录成功,则通知将cookie中的购物车数据持久化到数据库和redis中。
用户未登录时,将购物车加入cookie,代码如下:
此处的cookieKey生成规则是:GoodsCart_goodsId_property,其中property为propertyId:propertyValueId,多个之间以“_”相连,例如 1:23_2:24_3:25。
从cookie中查询购物车信息,代码如下:
但是,查询出来的cookie数组中只有一个cookie,即JSESSSIONID,并没有我存进去的购物车信息,然后在浏览器中查看cookie,发现已经存在,但是就是读取不出来。
解决方案:
经过排查,是因为cookie的特殊字符的原因,“:”是cookie中特殊字符,索引从cookie中读取时出现解析错误;
一个较好的解决办法就是:在将cookie值写入客户端浏览器之前,首先进行URLEncode编码,读取cookie时,进行URLDecode即可。
加入购物车:
查询购物车:
问题完美解决。
时间: 2024-11-13 16:07:06