PHP语言阅读量、浏览量的防止重复COOKIE多数据存储比较代码

落花生 2023-05-15 0 条评论 421 个足迹 日常记录,PHP语言,知识分享

星环博客

简介

PHP语言阅读量、浏览量的防止单个浏览用户重复性刷阅读量、浏览量,程序使用多数据存储比较,COOKIE和多存储比较。
同时存储再用户浏览器端的数据经过多层base64编码简化储存量,同时防止篡改数据。

代码

# 更新点击量-ON
# @param $modelid => 模型ID, $id => 文章ID, $modelInfo['tablename'] => 数据库名称
# @mtime 2023/05/10
# 数据结构 => MD5压缩数据(MD5压缩数据( MD5压缩数据(模型ID||MD5压缩数据(数据,数据)) ,MD5压缩数据(模型ID||MD5压缩数据(数据,数据)))||校验更新时间戳)
if (true){
    # -设置变量
    $set_cookie_if = false;
    $html_modify = false;
    $model_first = false;
    $set_cookie_oneid = [];
    $set_array = [];
    $set_time = 7;
    $set_time_stamp = $set_time*24*60*60;
    
    # -获取浏览用户的数据
    cookie(['prefix' => 'must_']);
    $get_cookie_reading = cookie('reading');
    $get_session_reading = session('reading', '', 'must');
    
    # 解析加密数据
    # -解析-COOKIE
    if ($get_cookie_reading) {
        $get_cookie_reading_all_replace = str_replace(' ', '+', $get_cookie_reading);
        $get_cookie_reading_all_basede = base64_decode($get_cookie_reading_all_replace);
        $get_cookie_reading_all_sgin = explode("||", $get_cookie_reading_all_basede);
    }
    # -解析-SESSION
    if ($get_session_reading) {
        $get_session_reading_all_replace = str_replace(' ', '+', $get_session_reading);
        $get_session_reading_all_basede = base64_decode($get_session_reading_all_replace);
        $get_session_reading_all_sgin = explode("||", $get_session_reading_all_basede);
    }
    
    # 判断-是否数据被修改
    if (!$get_cookie_reading) {
        $get_cookie_reading = $get_session_reading;
        $get_cookie_reading_all_sgin = $get_session_reading_all_sgin;
        $html_modify = true;
    }else if ($get_session_reading && $get_cookie_reading != $get_session_reading) {
        # -判断最新数据为哪列
        if ($get_cookie_reading_all_sgin[1] < $get_session_reading_all_sgin[1]) {
            $get_cookie_reading = $get_session_reading;
            $get_cookie_reading_all_sgin = $get_session_reading_all_sgin;
            $html_modify = true;
        }
    }
    # 获取数据组装数据
    if ($get_cookie_reading) {
        # -解析数据-不同模板的数据合集
        $get_cookie_reading_data_replace = str_replace(' ', '+', $get_cookie_reading_all_sgin[0]);
        $get_cookie_reading_data_basede = base64_decode($get_cookie_reading_data_replace);
        $get_cookie_reading_data_exp = explode(",", $get_cookie_reading_data_basede);
      
        
        # -解析获取不同模板的数据
        foreach ($get_cookie_reading_data_exp as $key => $val) {
            
            # --解析数据-单挑数据的内容
            $get_cookie_reading_one_replace = str_replace(' ', '+', $val);
            $get_cookie_reading_one_basede = base64_decode($get_cookie_reading_one_replace);
            $get_cookie_reading_one_exp = explode("||", $get_cookie_reading_one_basede);
            
            $modelid_list[] = $get_cookie_reading_one_exp[0];
            
            # --是否为当前模型的阅读
            $set_cookie_oneid = [];
            if ($get_cookie_reading_one_exp[0] == $modelid) {
                # ---解析已经处理的数据
                $get_cookie_reading_oneid_replace = str_replace(' ', '+', $get_cookie_reading_one_exp[1]);
                $get_cookie_reading_oneid_basede = base64_decode($get_cookie_reading_oneid_replace);
                $get_cookie_reading_oneid_exp = explode(",", $get_cookie_reading_oneid_basede);
                # ---是否数据已经存在
                $set_cookie_oneid = $get_cookie_reading_oneid_exp;
                if ((is_array($get_cookie_reading_oneid_exp) && count($get_cookie_reading_oneid_exp)<=0) || !in_array($id, $get_cookie_reading_oneid_exp)) {
                    $set_cookie_if = true;
                    # ----数据改变-ID添加
                    $set_cookie_oneid[] = $id;
                }
            }else{
                # ---保持原有数据不变
                $set_array[] = $val;
            }
            
            # 添加数据
            if (is_array($set_cookie_oneid) && count($set_cookie_oneid) > 0) {
                $set_cookie_oneid = array_filter($set_cookie_oneid);
                $set_cookie_oneid_imp = implode(",", $set_cookie_oneid);
                $set_cookie_oneid_base = base64_encode($set_cookie_oneid_imp);
                $set_cookie_one_data = $modelid."||".$set_cookie_oneid_base;
                $set_cookie_one_data_base = base64_encode($set_cookie_one_data);
                $set_array[] = $set_cookie_one_data_base;
            }
        }
        
        # -判断是否需要写入数据
        if ($set_cookie_if) {
            # --数据MD5化
            $set_array = array_filter($set_array);
            $set_array_imp = implode(",", $set_array);
            $set_array_base = base64_encode($set_array_imp);
            $set_array_base_time = $set_array_base."||".date("Ym", time());
            $set_array_time_base = base64_encode($set_array_base_time);
        }
        
        # 判断是否为-新模型数据
        if (!$modelid_list || !in_array($modelid, $modelid_list)) {
            $model_first = true;
        }
    }else{
        $model_first = true;
    }
    
    if ($model_first) {
        # --单挑数据
        $set_cookie_oneid[] = $id;
        $set_cookie_oneid = array_filter($set_cookie_oneid);
        $set_cookie_oneid_imp = implode(",", $set_cookie_oneid);
        $set_cookie_oneid_base = base64_encode($set_cookie_oneid_imp);
        $set_cookie_one_data = $modelid."||".$set_cookie_oneid_base;
        $set_cookie_one_data_base = base64_encode($set_cookie_one_data);
        $set_array[] = $set_cookie_one_data_base;
        $set_array = array_filter($set_array);
        # --数据MD5化
        $set_array_imp = implode(",", $set_array);
        $set_array_base = base64_encode($set_array_imp);
        $set_array_base_time = $set_array_base."||".date("Ym", time());
        $set_array_time_base = base64_encode($set_array_base_time);
        $set_cookie_if = true;
    }
    
    # -更新HITS浏览量
    if ($set_cookie_if) {
        # --更新数据库,自动加一
        Db::name($modelInfo['tablename'])->where('id', $id)->setInc('hits');
        # --写入COOKIE && SESSION
        cookie('reading', $set_array_time_base, ['prefix'=>'must_', 'expire'=>$set_time_stamp]);
        session('reading', 'must');
        session('reading', $set_array_time_base, 'must');
    }
    # -是否需要更新Cookie
    if ($html_modify) {
        cookie('reading', $get_session_reading, ['prefix'=>'must_', 'expire'=>$set_time_stamp]);
    }
}
# 更新点击量-END

版权声明:本文为原创文章,版权归 星环博客 所有,转载请注明出处!

本文链接: https://www.xhto.cn/archives/275.html

友情提示:添加友联和友联失效404的请联系博主,并确保自己网站已经添加博主为友联!

2023年05月15日 14:32:14 © 本文允许各作者规范转载

黑色的背后是黎明... + 赞赏博主吧!已经穷的开不起站了~

上一篇 下一篇
奇思幻想
表情
签到
赞一下
踩一下
  • PNG静图表情包
  • GIF动图表情包

评论事项 ( 请使用真实邮箱地址,以便接收评论回复信息 )

 这颗星球好像还没有被发现~
这里是B612星球,小王子外出寻找她的绵羊了,留言等她吧...
赞赏作者

支付宝

微信

支付宝红包码

[ 赞赏码 ]

打开对应软件 - 扫码赞赏

赞赏请备注好昵称和邮箱,方便公布排行榜

博客信息

文章数目79 篇
评论数目112 条
运行天数3年253天
友链特数0 条

广而告之

当前文章标签

https://www.xhto.cn/usr/themes/only/x-data/url.php
当前网站已经离线 - 星环博客
星环博客+https://www.xhto.cn/
https://www.xhto.cn/usr/themes/only/x-user/xeq_zfb.jpg
https://www.xhto.cn/usr/themes/only/x-user/xeq_wx.jpg
https://www.xhto.cn/usr/themes/only/x-user/xeq_hbm.jpg

即将离开 星环博客

您即将离开星环博客,请注意您的帐号和财产安全。


继续访问

星环博客 的运行时间:

花有重开日,人无再少年。

站点创建时间:2020-08-17 +  版权归属 星环博客 所有 +  © 2024 Copyright +  备案号: 粤ICP备2023084320号 +  不理白驹过隙,不信生死有命 +  页面加载速度:320ms
https://www.xhto.cn/usr/themes/only/x-img/xloading.gif