php中用memcached实现页面防刷新功能

5年以前  |  阅读数:463 次  |  编程语言:PHP 

有个新需求要加上去,防止用户频繁刷新页面。具体需求是当用户在一分钟之后内请求指定的页面超过100次,就直接拒绝请求。仔细分析后发现这个功能用memcache来做最方便:

1、以用户IP和被请求的文件名作为KEY值。

2、以memcached的方法increment()来自增记录用户访问次数,increment()是原子性增加,准确。

3、设置set()时指定过期时间为60s,这样就统计一分钟的访问次数。

于是写了个函数放在项目的初始化文件中调用,函数内容如下:


    function requestCount(){ 

     $patharr = pathinfo($_SERVER['PHP_SELF']);

     $filename = explode('?',$patharr['basename']);//获取当前文件名

     if( in_array($filename['0'],array('index.php','login.php','password.php')) ){

     global $memcache;

     $clientip = get_client_ip();

     //使用长整型IP和文件名生成KEY

     $ipkey = 'C'.sprintf("%u", ip2long( $clientip )). $filename['0'] ;

     if( $visitCount = $memcache->get($ipkey) ){  

          if($visitCount == 100){

            die('<h1>Please don\'t refresh your page!</h1>');

          }else{

            $memcache->increment($ipkey);

          }  

     }else{

        $memcache->set($ipkey,1,0,60);

     }

     }

    }

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例