PHP使用图片Etag判断用户的实例代码

发布时间:2019-12-29编辑:脚本学堂
分享一例php代码,使用图片的Etag信息判断用户,检测是否同一个用户的访问,有需要的朋友参考下。

原理是这样的:不使用javascript,SESSION,COOKIES,FLASH。
面是使用图片的Etag信息识别用户:
1,根据用户的 REMOTE_ADDR 与 HTTP_USER_AGENT 生成唯一Etag。
2,将Etag输出到客户端。
3,获取 HTTP_IF_NONE_MATCH 判断是否同一个用户访问。

一,htaccess文件(.htaccess rewrite)
 

复制代码 代码示例:
<IfModule mod_rewrite.c> 
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.jb200.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>