php实现历史浏览记录
其实原理很简单,就是利用cookie,实现记录,其中需要注意的点就是,设置一下,你需要保存的cookie长度,记录时间,下面是ci框架的基本实现
如有更加好的思路实现,欢迎qq(1245049149)联系。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | /** * @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记录方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | /** * @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 ; } |
欢迎留言讨论
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步