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

yipeiwu_com7年前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使用内置dir类实现目录遍历删除

本文实例讲述了PHP使用内置dir类实现目录遍历删除的方法。分享给大家供大家参考。具体实现方法如下: function clearDir($dir) { if (file_exis...

php 字符转义 注意事项

在php中: * 以单引号为定界符的php字符串,支持两个转义\'和\\ * 以双引号为定界符的php字符串,支持下列转义: \n 换行(LF 或 ASCII 字符 0x0A(10))...

php可变长参数处理函数详解

本文实例讲述了php可变长参数处理函数。分享给大家供大家参考,具体如下: 与C++一样,PHP中也可以对含有可变参数的函数进行处理,道理都一样,需要函数来专门处理参数列表。PHP中提供了...

php 数学运算验证码实现代码

复制代码 代码如下:<?php //------------------------------------- // 文件说明:数学运算验证码 // 文件作者:Jesse Lee...

php动态绑定变量的用法

本文实例讲述了php动态绑定变量的用法。分享给大家供大家参考。具体如下: private function bindVars($stmt,$params) { if ($para...