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 相关文章推荐
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
php数组一对一替换实现代码
Aug 31 PHP
解析link_mysql的php版
Jun 30 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
使用php批量删除数据库下所有前缀为prefix_的表
Jun 09 PHP
PHP中strtr字符串替换用法详解
Nov 26 PHP
php实现粘贴截图并完成上传功能
May 17 PHP
PHP函数超时处理方法
Feb 14 PHP
PHP用函数嵌入网站访问量计数器
Oct 27 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
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
zf框架的Filter过滤器使用示例
2014/03/13 PHP
PHP制作图形验证码代码分享
2014/10/23 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
javascript multibox 全选
2009/03/22 Javascript
jQuery 动态酷效果实现总结
2009/12/27 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
专科文秘应届生求职信
2013/11/18 职场文书
读书演讲主持词
2014/03/18 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
党风廉政建设责任书
2014/04/14 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
2015年客服工作总结范文
2015/04/02 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
百万英镑观后感
2015/06/09 职场文书
四大名著读书笔记
2015/06/25 职场文书