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 相关文章推荐
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
mysql 搜索之简单应用
Apr 27 PHP
探讨php中防止SQL注入最好的方法是什么
Jun 10 PHP
php图像处理函数大全(推荐收藏)
Jul 11 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
php实现求相对时间函数
Jun 15 PHP
PHP连接MSSQL方法汇总
Feb 05 PHP
php实现将base64格式图片保存在指定目录的方法
Oct 13 PHP
Django 中 cookie的使用
Aug 17 PHP
Laravel 加载第三方类库的方法
Apr 20 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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
js tab效果的实现代码
2009/12/26 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
iframe的父子窗口之间的对象相互调用基本用法
2013/09/03 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
浅谈webpack组织模块的原理
2018/03/10 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
英国高街电视:High Street TV
2018/05/22 全球购物
神路信息Java面试题目
2013/03/31 面试题
开业典礼主持词
2014/03/21 职场文书
企业党员公开承诺书
2014/03/26 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
学校实习推荐信
2015/03/27 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS