zoukankan      html  css  js  c++  java
  • 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;
        }
    

      欢迎留言讨论

  • 相关阅读:
    微信小程序-rpx
    vue项目页面切换到默认显示顶部
    访问formData的数据
    vue图片懒加载
    react+umi+dva
    switch判断中,case后面跟逻辑表达式出错
    给2020做一个小结
    react+next.js遇到的问题及解决
    域名相关(结构与规范)
    react+antd一边踩坑一边积累
  • 原文地址:https://www.cnblogs.com/qwgshare/p/8857244.html
Copyright © 2011-2022 走看看