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中Date获取时间不正确怎么办
Jun 05 PHP
php 什么是PEAR?
Mar 19 PHP
php 代码优化的42条建议 推荐
Sep 25 PHP
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
php的ZipArchive类用法实例
Oct 20 PHP
19个Android常用工具类汇总
Dec 30 PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
全面解读PHP的Yii框架中的日志功能
Mar 17 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
laravel自定义分页效果
Jul 23 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
php 远程图片保存到本地的函数类
2008/12/08 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
自己的js工具_Form 封装
2009/08/21 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
2015/08/24 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
Node.js实现数据推送
2016/04/14 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python实现代码统计工具(终极篇)
2016/07/04 Python
解决DataFrame排序sort的问题
2018/06/07 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
C语言笔试集
2012/07/24 面试题
中学实习教师自我鉴定
2013/12/12 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
Python 中的 copy()和deepcopy()
2021/11/07 Python
python双向链表实例详解
2022/05/25 Python