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 相关文章推荐
火车头discuz6.1 完美采集的php接口文件
Sep 13 PHP
fetchAll()与mysql_fetch_array()的区别详解
Jun 05 PHP
php按字符无乱码截取中文的方法
Mar 27 PHP
php正则preg_replace_callback函数用法实例
Jun 01 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
WordPress中查询文章的循环Loop结构及用法分析
Dec 17 PHP
分享php邮件管理器源码
Jan 06 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
彻底搞懂PHP 变量结构体
Oct 11 PHP
php实现socket推送技术的示例
Dec 20 PHP
PHP生成随机数的方法总结
Mar 01 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
Feb 15 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
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
jquery ajax 局部无刷新更新数据的实现案例
2014/02/08 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
JavaScript中绑定事件的三种方式及去除绑定
2016/11/05 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
Vue异步加载about组件
2017/10/31 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
python的pip有什么用
2020/06/17 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
Python 解析简单的XML数据
2020/07/24 Python
Java如何读取CLOB字段
2013/10/10 面试题
房地产营销策划方案
2014/02/08 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
校运会口号
2014/06/18 职场文书
宿舍标语大全
2014/06/19 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
车间班组长竞聘书
2015/09/15 职场文书
2019公司管理制度
2019/04/19 职场文书