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的宝库目录--PEAR
Oct 09 PHP
用Socket发送电子邮件(利用需要验证的SMTP服务器)
Oct 09 PHP
PHP生成数组再传给js的方法
Aug 07 PHP
PHP中比较时间大小实例
Aug 21 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
php支持断点续传、分块下载的类
May 02 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
php解决DOM乱码的方法示例代码
Nov 20 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
thinkPHP分页功能实例详解
May 05 PHP
php 数据结构之链表队列
Oct 17 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 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强制下载类型的实现代码
2011/04/21 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
php实现json编码的方法
2015/07/30 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
Python列表和元组的定义与使用操作示例
2017/07/26 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
日语专业毕业生自荐信
2013/11/11 职场文书
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
干部培训自我鉴定
2014/01/22 职场文书
大学军训感言600字
2014/02/25 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
学习计划是什么
2019/04/30 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
详解用Python把PDF转为Word方法总结
2021/04/27 Python
解决golang结构体tag编译错误的问题
2021/05/02 Golang
opencv 分类白天与夜景视频的方法
2021/06/05 Python
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js