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 mysql索引问题
Jun 07 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 PHP
php过滤敏感词的示例
Mar 31 PHP
PHP获取中英混合字符串长度的方法
Jun 07 PHP
php使用google地图应用实例
Dec 31 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
Dec 10 PHP
composer.lock文件的作用
Feb 03 PHP
CodeIgniter生成静态页的方法
May 17 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
Jan 21 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 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
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
百度地图API使用方法详解
2015/08/25 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
Yii2框架类自动加载机制实例分析
2018/05/02 PHP
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
jQuery图片缩放插件smartZoom使用实例详解
2017/08/25 jQuery
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
python装饰器代码深入讲解
2021/03/01 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
收银员的岗位职责范本
2014/02/04 职场文书
美容院经理岗位职责
2014/04/03 职场文书
《真想变成大大的荷叶》教学反思
2014/04/14 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
评测 | 大屏显示带收音机的高端音箱,JBL TUNE2便携式插卡音箱实测
2021/04/24 无线电
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python