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


Posted in PHP onAugust 19, 2014

有个新需求要加上去,防止用户频繁刷新页面。具体需求是当用户在一分钟之后内请求指定的页面超过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 相关文章推荐
用php写的serv-u的web申请账号的程序
Oct 09 PHP
php去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
redis 队列操作的例子(php)
Apr 12 PHP
php判断是否为json格式的方法
Mar 04 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
Yii配置文件用法详解
Dec 04 PHP
php简单判断文本编码的方法
Jul 30 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
Jun 28 PHP
Zend Framework数据库操作技巧总结
Feb 18 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
TP5框架实现签到功能的方法分析
Apr 05 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 #PHP
php中多维数组按指定value排序的实现代码
Aug 19 #PHP
PHP获取一个字符串中间一部分字符的方法
Aug 19 #PHP
php数组索引的Key加引号和不加引号的区别
Aug 19 #PHP
zend framework框架中url大小写问题解决方法
Aug 19 #PHP
深入理解PHP中的global
Aug 19 #PHP
PHP Session机制简介及用法
Aug 19 #PHP
You might like
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
jquery tools系列 expose 学习
2009/09/06 Javascript
监控 url fragment变化的js代码
2010/04/19 Javascript
再论Javascript的类继承
2011/03/05 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
Pyhton中防止SQL注入的方法
2015/02/05 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
利用python生成照片墙的示例代码
2020/04/09 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
美国购车网站:TrueCar
2016/10/19 全球购物
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
酒店总经理工作职责
2013/12/13 职场文书
经典演讲稿开场白
2014/08/25 职场文书
硕士学位论文评语
2014/12/31 职场文书
送达通知书
2015/04/25 职场文书
朋友离别感言
2015/08/04 职场文书
python数字图像处理之图像的批量处理
2022/06/28 Python
JS实现简单的九宫格抽奖
2022/06/28 Javascript