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 相关文章推荐
我的论坛源代码(二)
Oct 09 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 PHP
PHP验证码生成原理和实现
Jan 24 PHP
功能强大的PHP POST提交数据类
Jul 15 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
Jul 23 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
Feb 07 PHP
php-fpm添加service服务的例子
Apr 27 PHP
PHP递归算法的简单实例
Feb 28 PHP
Yii2框架自定义类统一处理url操作示例
May 25 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代码
2010/08/08 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
PHP函数in_array()使用详解
2014/08/20 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
javascript StringBuilder类实现
2008/12/22 Javascript
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
2019/01/25 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
临床医师专业个人自我评价
2014/01/08 职场文书
质量保证书范本
2014/04/29 职场文书
校长新学期致辞
2015/07/30 职场文书
儿童诗两首教学反思
2016/02/23 职场文书
HTML5页面打开微信小程序功能实现
2022/09/23 HTML / CSS