php实现历史浏览记录

其实原理很简单,就是利用cookie,实现记录,其中需要注意的点就是,设置一下,你需要保存的cookie长度,记录时间,下面是ci框架的基本实现

如有更加好的思路实现,欢迎qq(1245049149)联系。

    /**
     * @desc    设置cookie浏览记录
     * @date    2018-04-15 16:48:22
     * @param   [string $type记录浏览类型【as 查看记录表1;ps 查看记录表2】;int $id主键id]
     * @author  1245049149@qq.com
     * @return  [type]
     */
    public function set_cookie_history($type,$id){

        //设置初始数据
        $set_limit = 5; //浏览记录的容量限制

        //初始数据过滤
        if(!in_array($type,['as','ps'])){
            return false;
        }

        //获取cookie记录
        $string = $type.$id;
        $history_array = unserialize($_COOKIE['cookie_history']);
        if(!$history_array)
            $history_array = [];

        //浏览记录存在
        if(in_array($string,$history_array)){
            unset($history_array[array_search($string , $history_array)]); //删除存在
            array_unshift($history_array,$string);//重新放在第一个

        //浏览记录不存在
        }else{

            //没有超过记录的容量限制,直接放在第一个
            if(count($history_array)<$set_limit){
                array_unshift($history_array,$string);

            //超过记录的容量限制,删除最后一个,然后放在第一个
            }else{
                array_pop($history_array);
                array_unshift($history_array,$string);
            }
        }

        //将浏览数组序列化后写入cookie
        $expire_time = 3600 * 24 * 30; //过期时间
        $cookie_domain = $this->config->item('cookie_domain');
        $history_array = serialize($history_array);
        setcookie('cookie_history', $history_array, time()+$expire_time, '/', $cookie_domain);

    }

  上面是实现cookie的记录功能,下面是进行读取cookie记录方法:

    /**
     * @desc    获取cookie浏览记录
     * @date    2018-04-15 17:42:51
     * @param   [type]
     * @author  1245049149@qq.com
     * @return  [array $return_data]
     */
    public function get_cookie_history(){
        //设置初始返回数据
        $return_data = [];

        //获取cookie记录
        $history_array = unserialize($_COOKIE['cookie_history']);
        if(!$history_array)
            return $return_data;

        if($history_array){
            foreach($history_array as $k=>$v){

                //切割判断是否是as类型
                $as_temp = explode('as',$v);
                if($as_temp && $as_temp[1]){
                    //这里写,你要查询的sql语句
                    $sql = "select field1,field2 from table_test1 where id={$as_temp[1]}";
                    $res = $this->db->query($sql)->row_array();
                    if($res)
                        $return_data[] = ['type' => 'as','data' => $res];
                }

                //切割判断是否是ps类型
                $ps_temp = explode('ps',$v);
                if($ps_temp && $ps_temp[1]){
                    //这里写,你要查询的sql语句
                    $sql = "select field1,field2 from table_test2 where id={$as_temp[1]}";
                    $res = $this->db->query($sql)->row_array();
                    if($res)
                        $return_data[] = ['type' => 'ps','data' => $res];
                }
            }
            return $return_data;
        }

        //非法获取数据,直接返回
        return $return_data;
    }

  欢迎留言讨论

原文地址:https://www.cnblogs.com/qwgshare/p/8857244.html