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 相关文章推荐
用PHP制作静态网站的模板框架
Oct 09 PHP
坏狼php学习 计数器实例代码
Jun 15 PHP
php 将bmp图片转为jpg等其他任意格式的图片
Jun 29 PHP
php中的比较运算符详解
Oct 28 PHP
Yii Framework框架获取分类下面的所有子类方法
Jun 20 PHP
PHP临时文件的安全性分析
Jul 04 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
PHP解决高并发问题
Apr 01 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/04/09 日漫
PHP查询网站的PR值
2013/10/30 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
PHP反射基础知识回顾
2020/09/10 PHP
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
2012/10/18 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
React 组件间的通信示例
2018/06/14 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
利用python画一颗心的方法示例
2017/01/31 Python
详谈python read readline readlines的区别
2017/09/22 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
python使用matplotlib画饼状图
2018/09/25 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
小学生环保标语
2014/06/13 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
python文件目录操作之os模块
2021/05/08 Python