购物车管理包含功能

  • 提交商品到购物车
  • 显示购物车列表
  • 删除购物车里商品
  • 修改购物车
  • 清空购物车等等

购物车的实现方式

  • 可以把购物车的数据,给存储到 session 里面,一旦关闭浏览器,则商品数据就丢失;
  • 可以把购物车的数据,给存储到 cookie 里面,可以长久的保存购物车里面的数据;
  • 可以把购物车的数据,给存储到数据库里面,可以长久的保存购物车里面的数据;
  • 可以把购物车的数据,给存储到缓存里(memcache,redis),也可以长久的保存购物车的数据。
  • 注:Session 可能会引起并发问题,如果脚本很短,这通常没有问题。但如果脚本运行时间比较长,那就可能会产生问题。在现代 Web 应用程序开发中,有一个非常常见的情况,就是使用 AJAX 技术在同一个页面内发送多个请求获取数据。
  • 如果这些请求都需要使用Session,那么第一个请求到达服务器后会取得 Session 锁,其它请求就必须等待,所有请求将串行处理,即使它们彼此之间并没有依赖关系。这将大大增加页面的响应时间。
  • 有一个方法可以避免这个问题,就是在使用完 Session 以后立即调用 session_write_close()方法关闭 Session。这样 Session 锁就会释放,即使当前脚本还在等在处理。需要注意的是,调用该方法后,当前脚本就不能进一步操作 Session 了
  • 实例:京东购物车的设置,如果用户已经登录,则把购物车数据保存到数据库里面,如果没有登录,则把购物车的数据给保存到 cookie 里面,当登录时,要判断 cookie是否有购物车的数据,如果有,则把 cookie 里面的数据给移动到数据库里面。
  • 提交商品到购物车:在前台模块里新建一个 CartController 控制器,添加 addCart方法

下面用是PHP+redis实现的购物车单例类,可借鉴

    <?php
    /**
     * 购物车单例类
     */
    class CartSingleton
    {
      //定义一个静态的私有变量
      static private $_instance=null;
      private $redis=null;
      //私有化的构造方法
      private final function __construct()
      {
        //实例化
        $this->redis=new Redis();
        $this->redis->connect('127.0.0.1',6379);
      }
      //私有化的克隆方法
      private function __clone()
      {
      }
      //公有的静态方法
      static public function getInstance()
      {
        if(!(self::$_instance instanceof self)){
          self::$_instance = new CartSingleton();
        }
        return self::$_instance;
      }
      /**
       * 加入购物车
       *
       * @author YING
       * @param userId goodsName goodsId 用户id 商品名称 商品id
       * @return int
       */
       public function addCart($userId,$goodsName,$goodsId)
       {
         $hashKey="user_".$userId; //hash键名
         $key=$goodsId."_".$goodsName;//键名
         //加入
         return $this->redis->hIncrBy($hashKey,$key,1);
       }
      /**
       * 单删
       *
       * @author YING
       * @param userId goodsId
       * @return
       */
      public function cartDelOne($userId,$goodsId)
      {
        $hashKey="user_".$userId; //hash键名
        $key=$goodsId;//键名
        //删除
        return $this->redis->hDel($hashKey,$key);
      }
      /**
       * 清空购物车
       *
       * @author YING
       * @param userId
       * @return void
       */
      public function cartDelAll($userId)
      {
        $hashKey="user_".$userId; //hash键名
        //删除
        return $this->redis->del($hashKey);
      }
      /**
       * 购物车列表
       *
       * @author YING
       * @param userId
       * @return void
       */
      public function cartList($userId)
      {
        $hashKey="user_".$userId; //hash键名
        //查询数据
        return $this->redis->hGetAll($hashKey);
      }
    }
    //实例化类
    $obj=CartSingleton::getInstance();
Last modification:July 2, 2022
如果觉得我的文章对你有用,请随意赞赏