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 相关文章推荐
BBS(php &amp; mysql)完整版(一)
Oct 09 PHP
PHP 木马攻击防御技巧
Jun 13 PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 PHP
PHP迭代器的内部执行过程详解
Nov 12 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
May 10 PHP
php简单实现多语言切换的方法
May 09 PHP
基于php判断客户端类型
Oct 14 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
Apr 03 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
PHP连接sftp并下载文件的方法教程
Aug 26 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
请php正则走开
2008/03/15 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
用jquery来定位
2007/02/20 Javascript
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
Python中apply函数的用法实例教程
2014/07/31 Python
python基于queue和threading实现多线程下载实例
2014/10/08 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
python 的列表遍历删除实现代码
2020/04/12 Python
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
python获取指定时间差的时间实例详解
2017/04/11 Python
python使用标准库根据进程名如何获取进程的pid详解
2017/10/31 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
一些Solaris面试题
2015/12/22 面试题
英文简历中的自我评价
2013/10/06 职场文书
党员干部承诺书范文
2014/03/25 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
医德医风演讲稿
2014/05/20 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
导游词之天下银坑景区
2019/11/21 职场文书
JavaScript执行机制详细介绍
2021/12/06 Javascript