首先,新建一个html页面,用户打开,在里面插入一个1px的图片
如下所示:
index.html
<!DOCTYPE html>
<html>
<head>
<title>埋点统计</title></head>
<body>
<p>aa</p>
<img src="http://www.cpb.com?userid=111">
</body>
</html>
然后查看url地址的接口代码
$data = $_GET['userid'];
#todolis 做一些数据统计之类
header('Expires: Mon, 01 Jul 2003 00:00:00 GMT', true);
header('Last-Modified: '.gmdate('D, d M Y H:i:s').'GMT');
header('Cache-Control: no-cache, must-revalidate'); // HTTP/1.1
header('Pragma: no-cache'); // HTTP/1.0
header('Content-type: image/gif');
print base64_decode('R0lGODlhBQAFAIAAAP///yH5BAUUAAEALAAAAAAFAAUAAAIEjI+pWAA7');
实际效果:
优化:
举个类子,现在图片的url后面的参数是明文模式,转换为加密模式
1.后台使用redis的hash类型存一个key参数和value(m5d解密之后的值),每次从里面匹配参数
2.自己写个加密解密的函数
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// [ 应用入口文件 ]
function my_encrypt($data, $key) {
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($iv . $encrypted);
}
function my_decrypt($data, $key) {
$data = base64_decode($data);
$iv = substr($data, 0, 16);
$encrypted = substr($data, 16);
return openssl_decrypt($encrypted, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
}
$url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
if ($url) {
// 获取?号后面的参数部分
$pos = strpos($url, '?');
if ($pos !== false) {
$data = substr($url, $pos + 1);
}
}
// 解密
$key = 'my-secret-key';
$encrypted = $data ;
//$encrypted = my_encrypt($data, $key);
$decrypted = my_decrypt($encrypted, $key);
file_put_contents("./aa.log",$decrypted);
//加密
//$data = 'userid=1&group=2';
//$encrypted = my_encrypt($data, $key);
#todolis 做一些数据统计之类
header('Expires: Mon, 01 Jul 2003 00:00:00 GMT', true);
header('Last-Modified: '.gmdate('D, d M Y H:i:s').'GMT');
header('Cache-Control: no-cache, must-revalidate'); // HTTP/1.1
header('Pragma: no-cache'); // HTTP/1.0
header('Content-type: image/gif');
print base64_decode('R0lGODlhBQAFAIAAAP///yH5BAUUAAEALAAAAAAFAAUAAAIEjI+pWAA7');
效果所示: