zoukankan      html  css  js  c++  java
  • 利用COOKIE保存历史浏览商品的一个简单思路

    <?php
    //如是COOKIE 里面不为空,则往里面增加一个商品ID
    if (!empty($_COOKIE['SHOP']['history'])){
    
            //取得COOKIE里面的值,并用逗号把它切割成一个数组
            $history = explode(',', $_COOKIE['SHOP']['history']);
            //在这个数组的开头插入当前正在浏览的商品ID
            array_unshift($history, $id);
            //去除数组里重复的值
            $history = array_unique($history);
            // $arr = array (1,2,3,1,3);
            // $arr = array (1,1,2,3,3);
            // $arr = array (1,2,3);
            //当数组的长度大于5里循环执行里面的代码
            while (count($history) > 5){
            //将数组最后一个单元弹出,直到它的长度小于等于5为止
            array_pop($history);
            }
            //把这个数组用逗号连成一个字符串写入COOKIE,并设置其过期时间为30天
            setcookie('SHOP[history]', implode(',', $history), $cur_time + 3600 * 24 * 30);
    
        }else{
            //如果COOKIE里面为空,则把当前浏览的商品ID写入COOKIE ,这个只在第一次浏览该网站时发生
            setcookie('SHOP[history]', $id, $cur_time + 3600 * 24 * 30);
        }
    
    //以上均为记录浏览的商品ID到COOKIE里,下面将讲到怎样用这样COOKIE里的数据

    ·//取得COOKIE里的数据 ,格式为1,2,3,4 这样,当然也有可以为0
    ··$history =isset ($_COOKIE['SHOP']['history'][$uid]) ? $_COOKIE['SHOP']['history'][$uid] : 0;
    ·//写SQL语句,用IN 来查询出这些ID的商品列表
    ··$sql_history = "SELECT * FROM `goods` WHERE `goods_id` in ({$history})";
    ·//执行SQL语句,返回数据列表
    ··$goods_history = $db->getAll($sql_history);
    ··if ($goods_history) {
    ····$tpl->assign ('goods_history',$goods_history);
    ···}

    ?>

    这样的话,其实有个问题会出现,那就是如果这个浏览器一个人刚登陆完了后,退出登录。另一人再次登陆自己的账号,历史浏览记录会“混合”在一起,造成数据的不准确。

    最简单的解决办法就是,在存入cookie的时候,带入用户的ID,这样每个用户的历史浏览数据都不一样,也不容易冲突。代码如下:

    <?php
    
    //假设当前登陆用户的ID是568.
    $uid='568';$cur_time=time();
     //如是COOKIE 里面不为空,则往里面增加一个商品ID
    if (!empty($_COOKIE['SHOP']['history'][$uid])){
    
            //取得COOKIE里面的值,并用逗号把它切割成一个数组
            $history = explode(',', $_COOKIE['SHOP']['history']);
            //在这个数组的开头插入当前正在浏览的商品ID
            array_unshift($history, $id);
            //去除数组里重复的值
            $history = array_unique($history);
            // $arr = array (1,2,3,1,3);
            // $arr = array (1,1,2,3,3);
            // $arr = array (1,2,3);
            //当数组的长度大于5里循环执行里面的代码
            while (count($history) > 5){
            //将数组最后一个单元弹出,直到它的长度小于等于5为止
            array_pop($history);
            }
            //把这个数组用逗号连成一个字符串写入COOKIE,并设置其过期时间为30天
            setcookie("SHOP[history][$uid]", implode(',', $history), $cur_time + 3600 * 24 * 30);
    
        }else{
            //如果COOKIE里面为空,则把当前浏览的商品ID写入COOKIE ,这个只在第一次浏览该网站时发生
            setcookie("SHOP[history][$uid]", $id, $cur_time + 3600 * 24 * 30);
        }
    
    //以上均为记录浏览的商品ID到COOKIE里,下面将讲到怎样用这样COOKIE里的数据
    
        //取得COOKIE里的数据 ,格式为1,2,3,4 这样,当然也有可以为0
         $history =isset ($_COOKIE['SHOP']['history'][$uid]) ? $_COOKIE['SHOP']['history'][$uid] : 0;
        //写SQL语句,用IN 来查询出这些ID的商品列表
         $sql_history = "SELECT * FROM `goods` WHERE `goods_id` in ({$history})";
       //执行SQL语句,返回数据列表
        $goods_history = $db->getAll($sql_history);
        if ($goods_history) {
            $tpl->assign ('goods_history',$goods_history);
         }
    ?>
  • 相关阅读:
    android开发架构理解
    检测到LoaderLock”的解决办法(新办法,在vs2008中)
    1-2SPRING-BOOT-JPA添加lombok-管理getter/setter
    PHP数组使用
    处理sublime中文乱码
    c#遍历datatable,dataset
    sublime3更换主题,主题推荐
    laravel voyager 安装
    array_filter,匿名函数
    git 记住密码
  • 原文地址:https://www.cnblogs.com/phper12580/p/10535702.html
Copyright © 2011-2022 走看看