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动态创建Flash动画
Oct 09 PHP
PHP调用三种数据库的方法(3)
Oct 09 PHP
动易数据转成dedecms的php程序
Apr 07 PHP
php字符串截取中文截取2,单字节截取模式
Dec 10 PHP
解析PHP中如何将数组变量写入文件
Jun 06 PHP
PHP session文件独占锁引起阻塞问题解决方法
May 12 PHP
PHP查询附近的人及其距离的实现方法
May 11 PHP
微信公众号开发之文本消息自动回复php代码
Aug 08 PHP
PHP实现大数(浮点数)取余的方法
Feb 18 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
Apr 10 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 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中遍历数组的三种常用方法实例分析
2019/06/24 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
Python类的多重继承问题深入分析
2014/11/09 Python
举例详解Python中的split()函数的使用方法
2015/04/07 Python
利用Python如何生成随机密码
2016/04/20 Python
python机器学习之神经网络(一)
2017/12/20 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
python通过http下载文件的方法详解
2019/07/26 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
Python实现动态循环输出文字功能
2020/05/07 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
python热力图实现简单方法
2021/01/29 Python
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
火山动力Java笔试题
2014/06/26 面试题
艺术爱好者的自我评价分享
2013/10/08 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
大学英语专业求职信
2014/06/21 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
营销计划书范文
2015/01/17 职场文书
高中社区服务活动报告
2015/02/05 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
团日活动总结格式
2015/05/11 职场文书
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL