简介
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的请联系博主,并确保自己网站已经添加博主为友联!
黑色的背后是黎明... + 赞赏博主吧!已经穷的开不起站了~
哈哈哈,写的太好了https://www.cscnn.com/
哈哈哈,写的太好了https://www.cscnn.com/
叼茂SEO.bfbikes.com