PHP实现redis限制单ip、单用户的访问次数功能示例


Posted in PHP onJune 16, 2018

本文实例讲述了PHP实现redis限制单ip、单用户的访问次数功能。分享给大家供大家参考,具体如下:

有时候我们需要限制一个api或页面访问的频率,例如单ip或单用户一分钟之内只能访问多少次

类似于这样的需求很容易用Redis来实现

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth("php001");
//这个key记录该ip的访问次数 也可改成用户id
//$key = 'userid_11100';
$key=get_real_ip();
//限制次数为5
$limit = 5;
$check = $redis->exists($key);
if($check){
  $redis->incr($key);
  $count = $redis->get($key);
  if($count > 5){
    exit('请求太频繁,请稍后再试!');
  }
}else{
  $redis->incr($key);
  //限制时间为60秒
  $redis->expire($key,60);
}
$count = $redis->get($key);
echo '第 '.$count.' 次请求';
//获取客户端真实ip地址
function get_real_ip(){
  static $realip;
  if(isset($_SERVER)){
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
      $realip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }else if(isset($_SERVER['HTTP_CLIENT_IP'])){
      $realip=$_SERVER['HTTP_CLIENT_IP'];
    }else{
      $realip=$_SERVER['REMOTE_ADDR'];
    }
  }else{
    if(getenv('HTTP_X_FORWARDED_FOR')){
      $realip=getenv('HTTP_X_FORWARDED_FOR');
    }else if(getenv('HTTP_CLIENT_IP')){
      $realip=getenv('HTTP_CLIENT_IP');
    }else{
      $realip=getenv('REMOTE_ADDR');
    }
  }
  return $realip;
}
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
PHP详细彻底学习Smarty
Mar 27 PHP
PHP初学者最感迷茫的问题小结
Mar 27 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
Jun 03 PHP
重新封装zend_soap实现http连接安全认证的php代码
Jan 12 PHP
PHP 实现explort() 功能的详解
Jun 20 PHP
PHP编程中的常见漏洞和代码实例
Aug 06 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
php删除数组中重复元素的方法
Dec 22 PHP
Yii2 中实现单点登录的方法
Mar 09 PHP
PHP+redis实现的购物车单例类示例
Feb 02 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 #PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 #PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 #PHP
PHP堆栈调试操作简单示例
Jun 15 #PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 #PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 #PHP
基于swoole实现多人聊天室
Jun 14 #PHP
You might like
无数据库的详细域名查询程序PHP版(5)
2006/10/09 PHP
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
js 事件小结 表格区别
2007/08/13 Javascript
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
2017/07/04 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
python+opencv实现动态物体识别
2018/01/09 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
基于Python的OCR实现示例
2020/04/03 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
测量实习生自我鉴定
2013/09/19 职场文书
征兵宣传标语
2014/06/20 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书
关于教师节的广播稿
2015/08/19 职场文书
护士自荐信范文(2016推荐篇)
2016/01/28 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS
分享提高 Python 代码的可读性的技巧
2022/03/03 Python
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android