angusty/yii-limit

基于缓存的访问频率控制,依赖yii

dev-master 2016-05-28 06:03 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:09:29 UTC


README

相关说明

  • 访问频率控制,指定时间内可以访问多少次(访问频率)。默认规则是5分钟内可以访问1次。
  • 此类依赖于Yii内置的缓存机制,只能用于yii。默认情况下使用Yii::$app->cache缓存对象。
  • 可以自定义缓存对象,但必须是\yii\caching\Cache的一个实例,否则仍然会使用Yii::$app->cache缓存对象。

使用

<?php

// demo1: 用户登陆 要求一个用户在半个小时内 如果错误次数达到3次则不能登陆 基于ip地址的访问控制或者基于session_id
//AccessLimit 构造函数的第一个参数是 规则数组 规则数组由2部分组成 max_count 最大访问次数 max_second 最大访问时间
// 规则数组的意思是 在max_second秒内最多可以访问max_count次
$accessLimit = new AccessLimit(['max_count' => '3', 'max_second' => 1800]);
$module = 'address';
if ($accessLimit->check() === false) {
    //跳出逻辑
    exit('你在半小时内错误已达3次,请稍后再试');
}
if (账号或密码错误) {
    $accessLimit->addModuleRecord($module, '192.168.1.1');
} else {
    //登陆成功 删除访问次数信息
    $accessLimit->removeModuleRecord($module, '192.168.1.1');
}

//demo2: 用户30秒内只能发表一次评论
$accessLimit = new AccessLimit();
//也可以这样添加规则规则数组 
$accessLimit->setRules(['max_count' => '1', 'max_second' => 30]);
$module = 'article.reply.uid';
if ($accessLimit->check() === false) {
     //跳出逻辑
     exit('说话太快,你在30秒内只能发表1次评论,请稍后再试');
}
if (用户发表评论成功) {
    $accessLimit->addModuleRecord($module, $uid);
}
 
//demo3: 自定义缓存
//默认情况下使用的 Yii::$app->cache 缓存对象 具体使用的是什么缓存 Redis MemCache FileCache 依赖于具体的配置文件
//如果想自定义缓存 可以通过构造函数的第三个参数
use yii\caching\FileCache;

$cache = new FileCache();
$accessLimit = new AccessLimit('', '', $cache);
 
//或者这么干使用setCache
use yii\caching\FileCache;

$accessLimit = new AccessLimit();
$cache = new FileCache();
$accessLimit->setCache($cache);