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 相关文章推荐
超级实用的7个PHP代码片段分享
Jan 05 PHP
php 目录遍历、删除 函数的使用介绍
Apr 28 PHP
zend optimizer在wamp的基础上安装图文教程
Oct 26 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
ThinkPHP函数详解之M方法和R方法
Sep 10 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
微信支付开发动态链接Native支付
Jul 12 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
Oct 14 PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 PHP
Yii2.0建立公共方法简单示例
Jan 29 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 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中使用Oracle数据库(2)
2006/10/09 PHP
php 获取本机外网/公网IP的代码
2010/05/09 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
php绘制一个矩形的方法
2015/01/24 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
javascript版2048小游戏
2015/03/18 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
详解微信小程序审核不通过的解决方法
2018/01/17 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
python中threading开启关闭线程操作
2020/05/02 Python
如何使用canvas绘制可移动网格的示例代码
2020/12/14 HTML / CSS
职高毕业生自我鉴定
2013/10/21 职场文书
生物技术毕业生自荐信
2013/10/23 职场文书
庆八一活动方案
2014/01/25 职场文书
cf收人广告词
2014/03/14 职场文书
工作自我推荐信范文
2015/03/25 职场文书
交通事故案件代理词
2015/05/23 职场文书
小学入学感言
2015/08/01 职场文书
投资入股协议书
2016/03/22 职场文书
调研报告的主要写法
2019/04/18 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python