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的FTP学习(二)[转自奥索]
Oct 09 PHP
怎样在php中使用PDF文档功能
Oct 09 PHP
MYSQL数据库初学者使用指南
Nov 16 PHP
PHP中数组的三种排序方法分享
May 07 PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 PHP
PHP中两个float(浮点数)比较实例分析
Sep 27 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
Nov 15 PHP
基于php实现的验证码小程序
Dec 13 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
php实现构建排除当前元素的乘积数组方法
Oct 06 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 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
星际RPG字典
2020/03/04 星际争霸
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
Python 功能和特点(新手必学)
2015/12/30 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
python3设计模式之简单工厂模式
2017/10/17 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
Python实现时间序列可视化的方法
2019/08/06 Python
python中对_init_的理解及实例解析
2019/10/11 Python
解决Python二维数组赋值问题
2019/11/28 Python
Python多线程多进程实例对比解析
2020/03/12 Python
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
大学本科毕业生的自我鉴定
2013/11/26 职场文书
七年级生物教学反思
2014/01/30 职场文书
设计师个人求职信范文
2014/02/02 职场文书
安全责任书范本
2014/04/15 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
医生个人年终总结
2015/02/28 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS