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学习笔记 面向对象的构造与析构方法
Jun 13 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
Mar 01 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
推荐一本PHP程序猿都应该拜读的书
Dec 31 PHP
thinkPHP学习笔记之安装配置篇
Mar 05 PHP
php将金额数字转化为中文大写
Jul 09 PHP
10款实用的PHP开源工具
Oct 23 PHP
PHP实现冒泡排序的简单实例
May 26 PHP
php生成与读取excel文件
Oct 14 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
PHPstorm快捷键(分享)
Jul 17 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 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
xml在joomla表单中的应用详解分享
2012/07/19 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
php格式化日期实例分析
2014/11/12 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
php链式操作的实现方式分析
2019/08/12 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
浅析ES6的八进制与二进制整数字面量
2016/08/30 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
python中的多线程实例教程
2014/08/27 Python
基于Python List的赋值方法
2018/06/23 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
酒店总经理助理岗位职责
2014/02/01 职场文书
中专生自我鉴定范文
2014/02/02 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
服务标兵事迹材料
2014/05/04 职场文书
个人求职自荐信范文
2014/06/20 职场文书
个人批评与自我批评
2014/10/15 职场文书
学生打架检讨书
2014/10/20 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
七年级作文之下雨天
2019/12/23 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android
nginx静态资源的服务器配置方法
2022/07/07 Servers