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 计算两个时间戳相隔的时间的函数(小时)
Dec 18 PHP
PHP 获取客户端真实IP地址多种方法小结
May 15 PHP
浅析php过滤html字符串,防止SQL注入的方法
Jul 02 PHP
PHP批量上传图片的具体实现方法介绍.
Feb 26 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
Oct 01 PHP
PHP如何实现Unicode和Utf-8编码相互转换
Jul 29 PHP
PHP实现数据分页显示的简单实例
May 26 PHP
PHP图像识别技术原理与实现
Oct 27 PHP
PHP面向对象程序设计方法实例详解
Dec 24 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 PHP
YII框架页面缓存操作示例
Apr 29 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(3)
2006/10/09 PHP
PHP MVC模式在网站架构中的实现分析
2010/03/04 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
javascript引导程序
2008/10/26 Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
深入探究使JavaScript动画流畅的一些方法
2015/06/30 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
JS基于开关思想实现的数组去重功能【案例】
2019/02/18 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
Python中dict和set的用法讲解
2019/03/28 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
python中的split()函数和os.path.split()函数使用详解
2019/12/21 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
特色冷饮店创业计划书
2014/01/28 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
二年级学生评语大全
2014/04/23 职场文书
六一儿童节标语
2014/10/08 职场文书
2015年组织部工作总结
2015/04/03 职场文书
python自动化测试之Selenium详解
2022/03/13 Python
服务器间如何实现文件共享
2022/05/20 Servers