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 相关文章推荐
实用函数5
Nov 08 PHP
PHP 压缩文件夹的类代码
Nov 05 PHP
PHP file_exists问题杂谈
May 07 PHP
PHP插入排序实现代码
Apr 04 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
php中current、next与reset函数用法实例
Nov 17 PHP
dedecms集成财付通支付接口
Dec 28 PHP
php计算整个mysql数据库大小的方法
Jun 19 PHP
PHP内核探索:哈希表碰撞攻击原理
Jul 31 PHP
修复ShopNC使用QQ 互联时提示100010 错误
Nov 08 PHP
PHP连接数据库实现注册页面的增删改查操作
Mar 27 PHP
PHP脚本自动识别验证码查询汽车违章
Dec 20 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自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
2017/09/02 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
深入理解Python中变量赋值的问题
2017/01/12 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
python之当你发现QTimer不能用时的解决方法
2019/06/21 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
恶意软件的定义
2014/11/12 面试题
小学教师节活动方案
2014/01/31 职场文书
加入学生会演讲稿
2014/04/24 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
2014年节能工作总结
2014/12/18 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
律政俏佳人观后感
2015/06/09 职场文书
小学三年级数学教学反思
2016/02/16 职场文书