前言
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
代码参考
|
|