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 数组教程 定义数组
Oct 23 PHP
用Simple Excel导出xls实现方法
Dec 06 PHP
在PHP中使用X-SendFile头让文件下载更快
Jun 01 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
Oct 23 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
Symfony模板的快捷变量用法实例
Mar 17 PHP
yii使用bootstrap分页样式的实例
Jan 17 PHP
php 三大特点:封装,继承,多态
Feb 19 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 PHP
PHP如何通过表单直接提交大文件详解
Jan 08 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 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 防注入函数(格式化数据)
2011/08/08 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
PHP的重载使用魔术方法代码实例详解
2021/02/26 PHP
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
浅析JavaScript中的delete运算符
2013/11/30 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
推荐15个最好用的JavaScript代码压缩工具
2019/02/13 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
numpy中的高维数组转置实例
2018/04/17 Python
python实现随机漫步方法和原理
2019/06/10 Python
python FTP批量下载/删除/上传实例
2019/12/22 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
python numpy库np.percentile用法说明
2020/06/08 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
python Paramiko使用示例
2020/09/21 Python
交通事故检查书范文
2014/01/30 职场文书
《巨人的花园》教学反思
2014/02/12 职场文书
绿色环保演讲稿
2014/05/10 职场文书
小学爱国卫生月活动总结
2014/06/30 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang
详解Redis集群搭建的三种方式
2021/05/31 Redis
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android