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动态创建Flash动画
Oct 09 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
Linux环境下搭建php开发环境的操作步骤
Jun 17 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
Jun 28 PHP
php中opendir函数用法实例
Nov 15 PHP
php实现粘贴截图并完成上传功能
May 17 PHP
浅析Laravel5中队列的配置及使用
Aug 04 PHP
浅谈mysql_query()函数的返回值问题
Sep 05 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
Aug 17 PHP
thinkPHP5框架导出Excel文件简单操作示例
Aug 03 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 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+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
php设计模式 Observer(观察者模式)
2011/06/26 PHP
PHP通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
javascript中如何判断类型汇总
2019/05/14 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
Django Admin实现上传图片校验功能
2016/03/06 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
详解python3中的真值测试
2018/08/13 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
解除劳动合同证明书
2014/09/26 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL