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 相关文章推荐
支持oicq头像的留言簿(二)
Oct 09 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
yii框架源码分析之创建controller代码
Jun 28 PHP
PHP 转义使用详解
Jul 15 PHP
PHP ignore_user_abort函数详细介绍和使用实例
Jul 15 PHP
php结合curl实现多线程抓取
Jul 09 PHP
详解PHP实现执行定时任务
Dec 21 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
Yii2实现ajax上传图片插件用法
Apr 28 PHP
PHP下的浮点运算不准的解决方法
Oct 27 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
PHP反射原理与用法深入分析
Sep 28 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
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
JavaScript的public、private和privileged模式
2009/12/28 Javascript
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
JS实现弹性漂浮效果的广告代码
2015/09/02 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
Python实现字典依据value排序
2016/02/24 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
python实现人工蜂群算法
2020/09/18 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
海南地接欢迎词
2014/01/14 职场文书
迅雷Cued工作心得体会
2014/01/27 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
市场拓展计划书
2014/05/03 职场文书
爱国主义演讲稿
2014/05/07 职场文书
法人身份证明书
2014/10/08 职场文书
青年教师听课心得体会
2016/01/15 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
MySQL七大JOIN的具体使用
2022/02/28 MySQL