PHP使用图片Etag判断用户的实例代码
原理是这样的:不使用Javascript,SESSION,COOKIES,FLASH。
面是使用图片的Etag信息识别用户:
1,根据用户的 REMOTE_ADDR 与 HTTP_USER_AGENT 生成唯一Etag。
2,将Etag输出到客户端。
3,获取 HTTP_IF_NONE_MATCH 判断是否同一个用户访问。
一,htaccess文件(.htaccess rewrite)
RewriteEngine On
RewriteRule ^pic.png$ index.php?pic=1 [NC]
</IfModule>
有关htaccess的相关内容,请参考文章:
Apache .htaccess配置的十一个实例
探讨:htaccess URL重写rewrite与重定向redirect
使用htaccess进行访问控制的方法详解
htaccess伪静态规则配置的几个例子
php中.htaccess文件的详细用法
17个简单实用的htaccess技巧
htaccess教程大全(伪静态、重定向、域名绑定、防盗链等)
.htaccess文件使用总结
.htaccess配置详解(全面经典不容错过)
apache .htaccess配置详解
.htaccess 文件的应用实例
二,php文件---index.php:
define('SECRET', 'j8s91slksd9ab'); // secret
define('LOG', 'data.log'); // 保存用户数据
// 生成 etag
function genEtag(){
if(!empty($_SERVER['HTTP_IF_NONE_MATCH'])){
$etag = $_SERVER['HTTP_IF_NONE_MATCH'];
}else{
$etag = substr(md5(SECRET. substr(md5($_SERVER['REMOTE_ADDR']),0,16). substr(md5($_SERVER['HTTP_USER_AGENT']),0,16)),0, 16);
}
return $etag;
}
// 显示图片
function showPic($etag){
header('content-type:image/png');
header('Etag:'.$etag);
$im = imagecreate(1, 1); // 生成1x1px的透明图片
imagecolorallocatealpha($im, 0, 0, 0, 127);
imagepng($im);
imagedestroy($im);
exit();
}
// 获取存储的数据
function getData(){
$logdata = file_exists(LOG)? file_get_contents(LOG) : '';
if(!$logdata){
$data = array();
}else{
$data = json_decode($logdata, true);
}
return $data;
}
$etag = genEtag();
$pic = isset($_GET['pic'])? $_GET['pic'] : 0;
if($pic==1){
showPic($etag);
}
$data = getData();
// 提交表单
$send = isset($_POST['send'])? $_POST['send'] : 0;
if($send==1){
$txt = isset($_POST['txt'])? $_POST['txt'] : '';
if($txt!=''){
$data[$etag] = $txt;
file_put_contents(LOG, json_encode($data),true);
}
}
$txt = isset($data[$etag])? $data[$etag] : ''; // 用户输入的数据
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title> PIC ETAG - www.jbxue.com</title>
</head>
<body>
<img src="pic.png">
<form method="post" action="index.php">
<p>请填写内容:</p>
<p><textarea name="txt" style="width:450px;height:150px"><?=$txt ?></textarea></p>
<p><input type="submit" value="提交"></P>
<input type="hidden" name="send" value="1">
</form>
</body>
</html>
您可能感兴趣的文章:
PHP使用图片Etag判断用户的实例代码
PHP设置图片浏览器缓存方法介绍
解析 PHP和浏览器缓存机制
php 文件头部(header)信息详解
php下载css中图片函数
Apache/Nginx配置浏览器缓存静态文件的详情教程
asp.net中Server.Transfer重定向到图片导致缓存机制失效解决方法
JS判断图片是否加载完成并获取图片宽度
php验证码(GD库生成验证码)的例子
PHP防盗链图片怎么破解?实例代码