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 相关文章推荐
模仿OSO的论坛(三)
Oct 09 PHP
浅析php变量修饰符static的使用
Jun 28 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
Mar 25 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
Apr 29 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
Jul 08 PHP
php天翼开放平台短信发送接口实现方法
Dec 22 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
phpcms的分类名称和类别名称的调用
Jan 05 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
php unlink()函数使用教程
Jul 12 PHP
使用vs code编辑调试php配置的方法
Jan 29 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 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 文件状态缓存带来的问题
2008/12/14 PHP
dedecms中使用php语句指南
2014/11/13 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
PHP7新功能总结
2019/04/14 PHP
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
jQuery超酷平面式时钟效果代码分享
2020/03/30 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
javascript网页随机点名实现过程解析
2019/10/15 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
2020/11/09 jQuery
JS实现纸牌发牌动画
2021/01/19 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
python程序输出无内容的解决方式
2020/04/09 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
Chain Reaction Cycles俄罗斯:世界上最大的在线自行车商店
2019/08/27 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
EJB的角色和三个对象
2015/12/31 面试题
创业计划实施的7大步骤
2014/02/05 职场文书
师范生自我鉴定
2014/03/20 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
家属联谊会致辞
2015/07/31 职场文书
办公室卫生管理制度
2015/08/04 职场文书
《火烧云》教学反思
2016/02/23 职场文书