添加购物车时,每次得到的session都是新的,所以,每次cart都是null,每次都会创建一个新的cart。怎么才能把商品添加到同一个购物车。不知道哪里有问题, 怎么才能返回之前创建过的session
protected void addItem(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取请求的参数 商品编号
int id = WebUtils.parseInt(req.getParameter("id"), 0);
// 调用 bookService.queryBookById(id):Book 得到图书的信息
Book book = bookService.queryBookById(id);
// 把图书信息,转换成为 CartItem 商品项
CartItem cartItem = new CartItem(book.getId(),book.getName(),1,book.getPrice(),book.getPrice());
// 调用 Cart.addItem(CartItem);添加商品项
HttpSession session = req.getSession();
System.out.println(session.isNew());
Cart cart = (Cart) session.getAttribute("cart");
if (cart == null) {
cart = new Cart();
session.setAttribute("cart",cart);
}
cart.addItem(cartItem);
System.out.println(cart);
System.out.println("请求头 Referer 的值:" + req.getHeader("Referer"));
// 重定向回原来商品所在的地址页面
resp.sendRedirect(req.getHeader("Referer"));
}
1.同一个会话的session不应该改变,但当使用vue的时候会出现session失效的问题
2.但是看你现在用的是servlet实现,应该还没有用到vue,所以session的问题不清楚原因
3.可以跟cookie一起使用,把session的id保存在cookie中,然后每次请求的时候,从cookie中拿出id,找到对应的session
购物车对应一个用户ID吧,用户添加进购物车就将商品添加进当前用户ID下的购物车
还有个办法,你在前端保存购物车信息,每次用户添加进购物车就把商品发送给后端返回商品数据在前端保存,最后用户提交的时候再把所有的购物车商品发给后端