Cookie存储购物车

1.1 需求分析

  • 使用Cookie存储购物车数据,服务层负责业务逻辑,控制器层负责读写cookie。
  • 说明:Cookie的value存储List<Cart> 的json格式字符串数据(中文需要Unicode编码,因为cookie的值不能存在中文字符)
  • 总结:
    实现cookie存储购物车控制器层代码:
    cookieName: pinyougou_cart
    cookieValue: List<Cart>集合转化成json格式的字符串,有中文需要转码。
  • 实现步骤:
  1. 定义CartController.java控制器,读写购物车。
    把商品添加到购物车,再把购物车存储Cookie
    先从浏览器中获取Cookie,从Cookie中获取原来的购物车
  • 详细步骤:(未登录的用户,购物车存储到Cookie)
  1.  获取购物车
  2. 把商品添加到购物车
  3. 把添加后的购物车存储到Cookie
  • Cookie工具类(放在common工程中)
     
    public final class CookieUtils {
    	
    	/** 定义Cookie名称的静态内部类 */
    	public static class CookieName{
    		/** 定义存放在Cookie中购物车的名称 */
    		public static final String PINYOUGOU_CART = "pinyougou_cart";
    	}
    	
    	
    	/**
    	 * 根据Cookie的名称获取指定的Cookie
    	 * @param request 请求对象
    	 * @param cookieName cookie的名称
    	 * @return Cookie
    	 */
    	public static Cookie getCookie(HttpServletRequest request, String cookieName){
    		/** 获取所有的Cookie */
            Cookie[] cookies = request.getCookies();
            if (cookies != null && cookies.length > 0){
            	for (Cookie cookie : cookies){
            		if (cookie.getName().equals(cookieName)){
            			return cookie;
            		}
            	}
            }
            return null;
    	}
        /**
         * 根据CookieName获取指定的Cookie值
         * @param request 请求对象
         * @param cookieName cookie的名称
         * @param encoded 是否编码
         * @return Cookie的值
         */
        public static String getCookieValue(HttpServletRequest request, 
        				String cookieName, boolean encoded) {
        	/** 获取指定的Cookie */
        	Cookie cookie = getCookie(request, cookieName);
            String cookieValue = null;
            try {
    	        if (cookie != null) {
         			if (encoded){
         				cookieValue = URLDecoder.decode(cookie.getValue(), "UTF-8");
         			}else{
         				cookieValue = cookie.getValue();
         			}
    	        }
            } catch (Exception e) {
             	e.printStackTrace();
            }
            return cookieValue;
        }
     
        /**
         * 根据Cookie的名称删除指定的Cookie
         * @param request 请求对象
         * @param response 响应对象
         * @param cookieName cookie名称
         */
        public static void deleteCookie(HttpServletRequest request, 
        				HttpServletResponse response, String cookieName) {
        	setCookie(request, response, cookieName, null, 0, false);
        }
        
        /**
         * 设置Cookie
         * @param request 请求对象
         * @param response 响应对象
         * @param cookieName cookie的名称
         * @param cookieValue cookie的值
         * @param maxAge 存放Cookie的最大存放时间(按秒计算)
         * @param encoded 是否编码
         */
        public static void setCookie(HttpServletRequest request, 
    								 HttpServletResponse response,
    								 String cookieName, String cookieValue, 
    								 int maxAge, boolean encoded) {
        	try {
            	/** 对Cookie的值进行判断 */
                if (cookieValue == null) {
                    cookieValue = "";
                }
                if (encoded) {
                    cookieValue = URLEncoder.encode(cookieValue, "UTF-8");
                }
                Cookie cookie = getCookie(request, cookieName);
                if (cookie == null){
                	cookie = new Cookie(cookieName, cookieValue);
                }
                /** 设置Cookie的值 */
                cookie.setValue(cookieValue);
                /** 设置最大存活时间 */
                cookie.setMaxAge(maxAge);
                /** 设置访问路径 */
                cookie.setPath("/");
                /** 添加到用户浏览器 */
                response.addCookie(cookie);
            } catch (Exception e) {
            	e.printStackTrace();
            }
        }
    }

    CartController.java控制器:
     

    /** 购物车控制器 */
    
    @RestController
    
    @RequestMapping("/cart")
    
    public class CartController {
    
        @Reference(timeout = 30000)
    
        private CartService cartService;
    
        @Autowired
    
        private HttpServletRequest request;
    
        @Autowired
    
        private HttpServletResponse response;
        /** 添加SKU商品到购物车 */
    
        @GetMapping("
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个使用 session cookie 实现购物车的示例代码,使用 Java Spring 框架实现: ```java @Controller public class ShoppingCartController { @GetMapping("/") public String showIndex(Model model, HttpServletRequest request) { // 获取购物车中的商品 List<String> cartItems = (List<String>) request.getSession().getAttribute("cart_items"); model.addAttribute("cartItems", cartItems); return "index"; } @PostMapping("/add-to-cart") public String addToCart(@RequestParam("item") String item, Model model, HttpServletRequest request) { // 获取购物车中的商品 List<String> cartItems = (List<String>) request.getSession().getAttribute("cart_items"); if (cartItems == null) { cartItems = new ArrayList<>(); } // 添加商品购物车 cartItems.add(item); // 将购物车保存到 session 中 request.getSession().setAttribute("cart_items", cartItems); // 返回购物车页面 model.addAttribute("cartItems", cartItems); return "cart"; } } ``` 在这个示例中,我们使用了 Java Spring 的 HttpSession 对象来实现购物车功能。当用户请求主页时,我们从 session 中获取购物车中的商品,并在页面上显示。当用户添加商品购物车时,我们将商品添加到 session 中,并返回购物车页面,其中包含了购物车中的所有商品。 需要注意的是,我们在使用 HttpSession 时需要注意 session 数据的安全性,避免 session 被攻击。我们可以在配置文件中设置 session 的超时时间,或者使用更加安全的 session 存储方式来保护 session 数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hyhcloud

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值