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 相关文章推荐
用文本作数据处理
Oct 09 PHP
用PHP和ACCESS写聊天室(十)
Oct 09 PHP
解析php下载远程图片函数 可伪造来路
Jun 25 PHP
PHP获取当前url的具体方法全面解析
Nov 26 PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 PHP
php从字符串创建函数的方法
Mar 16 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
Mar 25 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
PHP格式化MYSQL返回float类型的方法
Mar 30 PHP
php计算多个集合的笛卡尔积实例详解
Feb 16 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
Mar 18 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
php 之 没有mysql支持时的替代方案
2006/10/09 PHP
让php处理图片变得简单 基于gb库的图片处理类附实例代码下载
2011/05/17 PHP
PHP flock 文件锁详细介绍
2012/12/29 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
PHP session 会话处理函数
2016/06/06 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
ko knockoutjs动态属性绑定技巧应用
2012/11/14 Javascript
JS代码同步文本框内容的实例方法
2013/07/12 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
2015/08/07 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
vue+flask实现视频合成功能(拖拽上传)
2021/03/04 Vue.js
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
python aiohttp的使用详解
2019/06/20 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
Python&amp;&amp;GDAL实现NDVI的计算方式
2020/01/09 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
前台文员岗位职责
2013/12/28 职场文书
写给老师的表扬信
2014/01/21 职场文书
设计专业自荐信
2014/06/19 职场文书
甜品店创业计划书
2014/09/21 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
农贸批发市场管理制度
2015/08/07 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python