cookie技术的实现
⼀、购物车的cookie技术,有四条分⽀的操作,如下图:
⼆、标题cookie和session的区别(Cookie通过在客户端记录信息确定⽤户⾝份,Session通过在服务器端记录信息确定⽤户⾝份。):
Cookie:给客户端们颁发⼀个通⾏证,每⼈⼀个,⽆论谁访问都必须携带⾃⼰通⾏证。这样服务器就能从通⾏证上确认客户⾝份了。Session:就是通过检查服务器上的“客户明细表”来确认客户⾝份,Session相
当于程序在服务器上建⽴的⼀份客户档案,客户来访的时候只需要查询客户档案表就可以了。
三、这⾥要商品的详细页⾯,要跳转到购物车,需要改⼀下bug,修改为quantity,因为我的web前端定义接收参数为quantity
四、web前端代码如下:
实现cookie基本步骤:
1、接收前端传递过来的skuId和添加数量
2、去sku服务层查询sku基本信息
3、创建订单对象,把sku基本信息set过去
4、判断⽤户是否登录
5、总体业务逻辑:
if(未登陆)
创建列表
先获取购物车cookie
If(cookie==null)
直接add进列表
else
把cookie的json字符串转为java的列表
遍历cookie的列表和⽤户点击的商品是否相同
If(相同)
更新购物车的商品数量
else
直接add进列表
cookie的覆盖操作(列表转json存⼊cookie)
else(登录)
查询skuId是否被该⽤户memberId添加
if为空
该⽤户未添加这skuid商品
else
该⽤户已添加过该skuid商品,需要更新添加该商品的数量
同步缓存
@Controller
public class CartController {
@Reference
SkuService skuService;
@Reference
CartService cartService;
@RequestMapping("addToCart")
public String addToCart(String skuId,int quantity, HttpServletRequest request, HttpServletResponse response){ //调⽤商品服务查询商品信息
PmsSkuInfo skuInfo = SkuById(skuId,"");
//将商品信息封装成购物车信息
OmsCartItem omsCartItem =new OmsCartItem();
omsCartItem.setCreateDate(new Date());//订单创建⽇期
omsCartItem.setProductSkuId(skuId);//sku的id
omsCartItem.setQuantity(quantity);//sku添加的数⽬
//需要调⽤sku服务查询
omsCartItem.SkuName());//sku的名称
omsCartItem.SkuDefaultImg());//sku主图
omsCartItem.ProductId());//spu的id
omsCartItem.Catalog3Id());//三级分类id
omsCartItem.Price());//sku商品价格
//判断⽤户是否登录
String memberId ="";
//⽤户没有登录(memberId为空)
if(StringUtils.isBlank(memberId)){
List<OmsCartItem> omsCartItemList =new ArrayList<>();//创建购物车列表
//先获取购物车的cookie
String cartListCookie = CookieValue(request,"cartListCookie",true);
if(StringUtils.isBlank(cartListCookie)){//如果cookie为空
omsCartItemList.add(omsCartItem);//把购物车对象add进去
}else{//如果cookie不为空
omsCartItemList = JSON.parseArray(cartListCookie, OmsCartItem.class);//把获取的cookie的json字符串列表,以购物车映射对象转换为java的列表
boolean exit =judge_cart_exit(omsCartItem,omsCartItemList);//⽤户添加的商品在cookie中存在,则为true
if(exit==false){//为false,⽤户添加的商品在cookie中不存在,直接把商品add进列表,保存到cookie即可!
omsCartItemList.add(omsCartItem);
}
}
//覆盖cookie
CookieUtil.setCookie(request,response,"cartListCookie", JSONString(omsCartItemList),60*60*72,true);
}else{
//⽤户已经登陆,从db查询购物车数据
OmsCartItem omsCartItemFromDb = cartService.ifCartExistByUser(memberId,skuId);
//不需要查询该⽤户的购物车集合,只需要查询skuId是否被该⽤户memberId添加即可!
//如果为空,则未添加
if(omsCartItemFromDb == null){
//当前memberId⽤户没有添加过当前skuId的商品
omsCartItem.setMemberId(memberId);
cartService.addCart(omsCartItem);
}else{
//当前memberId⽤户添加过当前skuId的商品
omsCartItemFromDb.Quantity());
cartService.updateCart(omsCartItemFromDb);
}
//同步缓存
cartService.flushCartCache(memberId);
}
return"redirect:/success.html";//redirect重定向的意思,返回⼀个路径的页⾯
}
private boolean judge_cart_exit(OmsCartItem omsCartItem, List<OmsCartItem> omsCartItemList){
boolean a =false;
for(OmsCartItem Item : omsCartItemList){//遍历浏览器原本存储的cookie的商品列表selenium获取cookie
String productSkuId = ProductSkuId();
if(productSkuId.ProductSkuId())){//如果原本存储的cookie的商品,和⽤户点击的商品的id相同
Item.Quantity()+Quantity());//更新商品的商品数量(⽤户添加的数量+原本cookie存储数量)
a =true;//⽤户添加的商品在cookie中存在,则为true
}
}
return a; }
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论