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 相关文章推荐
使用Apache的rewrite技术
Jun 22 PHP
php中变量及部分适用方法
Mar 27 PHP
黑夜路人出的几道php笔试题
Aug 04 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
PHP 使用MySQL管理Session的回调函数详解
Jun 21 PHP
PHP分页详细讲解(有实例)
Oct 30 PHP
PHP中变量引用与变量销毁机制分析
Nov 15 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
PHP常用技巧汇总
Mar 04 PHP
php readfile下载大文件失败的解决方法
May 22 PHP
php中的buffer缓冲区用法分析
May 31 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 Smarty初体验二 获取配置信息
2011/08/08 PHP
php下拉选项的批量操作的实现代码
2013/10/14 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
Python读写zip压缩文件的方法
2018/08/29 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
银行职员个人的工作自我评价
2014/02/15 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
捐书倡议书
2014/08/29 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
请假条应该怎么写?
2019/06/24 职场文书