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 set_time_limit(0)长连接的实现分析
Mar 02 PHP
php输出表格的实现代码(修正版)
Dec 29 PHP
PHP 异步执行方法,模拟多线程的应用分析
Jun 03 PHP
php实现批量压缩图片文件大小的脚本
Jul 04 PHP
详解PHP中的PDO类
Jul 06 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
PHP生成和获取XML格式数据的方法
Mar 04 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 PHP
laravel框架创建授权策略实例分析
Nov 22 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+javascript的日历控件
2009/11/19 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
php远程下载类分享
2016/04/13 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
logging level级别介绍
2020/02/21 Python
python进行参数传递的方法
2020/05/12 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
施华洛世奇天猫官方旗舰店:SWAROVSKI
2017/04/17 全球购物
动物科学专业毕业生的自我评价
2013/11/29 职场文书
学习委员自我鉴定
2014/01/13 职场文书
运动会解说词200字
2014/02/06 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
小学教师教学随笔
2015/08/14 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python