前言
Yii 的 restful 实现了用户访问速率的控制(RateLimiter),但是是基于 user 组件的,也就是说用户需要先登录。这里仿照 RateLimiter 写了一个基于 Ip 的控制访问速率的,需要用到 cache 组件用来进行存储每个ip访问的次数和时间。
配置和扩展
把过滤器注册进控制器中12345678910public function behaviors(){ return [ 'ipRateLimiter' => [ 'class' => IpRateLimiter::className(), # 开启过滤 'enabled' => true ], ];}
扩展的话需要先看一下下面给出的代码。需要更改的有三个方法123getRateLimit($request, $action)loadAllowance($request, $action)saveAllowance($request, $action, $allowance, $timestamp)
这三个方法的作用下面代码中的备注已经很清楚了,也给了一个简单的 dome。
三个方法都包含了 $request, $action 两个参数,可以通过这两个对每个 action 的访问进行更精细的控制
IpRateLimiter 代码参考
|
|