介绍
小编给大家分享一下php频率限制类怎么用,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!
实现单个ip限制60秒1次
单个关键字,比如手机号,限制60秒1次,3600秒10次
& lt; php ? 类Sina_Mail_WebAntispam { const PREFIX_WHITELIST=& # 39; w: & # 39;; const PREFIX_KILL=& # 39; k: & # 39;; const PREFIX_VERIFYCODE=& # 39; c: & # 39;; const PREFIX_VERIFIED=& # 39; v: & # 39;; const STATUS_UPDATE=& # 39; [U] & # 39;; 私人mc美元=零; 私人$ config=零; 私人数组$白名单=(); 私人$ keyPrefix=& # 39; & # 39;; 私人数组$间隔=(); 私人$=更新数组(); 私人美元地位=array (); 公共函数__construct (mc,配置美元){ $ this→mc=mc美元; 这→美元配置=美元配置; 如果(收取($ this→设置→前缀)){ $ this→keyPrefix=$这→设置→前缀; } 如果(收取($ this→设置→whitelistKey)) { wls=这→美元mc→得到($ this→设置→whitelistKey); 如果(!空(wls)美元){ $ this→白名单=,wls美元; } } } 公共函数setWhitelist(和白名单美元){ $ this→白名单=,美元白名单; }/*验证限制规则*/公共功能检查(ip=null,关键美元=null) { 如果(!ip和美元,键){美元! 返回错误; } 如果(关键){ 如果(! is_array(键)美元){ (数组键=美元关键); 其他}{ 键=美元关键; } }//第一个过滤器通过白名单 如果(!空($ this→白名单)){ 如果($ ip,,$ this→filterByWhitelist ($ ip, & # 39; ip # 39;)) { 这→美元地位(self:: PREFIX_WHITELIST。$ ip)=1; 返回true; } 如果美元(键){ foreach(键为键)美元{ if ($ this→filterByWhitelist($键,& # 39;关键# 39;)){ 这→美元地位(self:: PREFIX_WHITELIST。例子)=1美元; 返回true; } } } } 如果美元(ip) { $ ip=$ this→keyPrefix。$ ip; }//第二,检查验证好了 如果(!空($ this→设置→验证)){ 如果($ ip,,$ this→mc→get (self:: PREFIX_VERIFIED。$ ip)) { 这→美元地位(self:: PREFIX_VERIFIED。$ ip)=1; 返回true; } 如果美元(键){ foreach(键为键)美元{ $ verifiedKey=self:: PREFIX_VERIFIED。$ this→keyPrefix。美元的关键; if ($ this→mc→(verifiedKey美元)){ 这→美元地位[$ verifiedKey]=1; 返回true; } } } } $科斯=!空($ this→设置→杀);//检查死亡 如果科斯($){ 如果($ ip,,$ this→mc→get (self:: PREFIX_KILL。$ ip)) { 这→美元地位(self:: PREFIX_KILL。$ ip)=1; 返回错误; } 如果美元(键){ foreach(键为键)美元{ $ killKey=self:: PREFIX_KILL。$ this→keyPrefix。美元的关键; if ($ this→mc→(killKey美元)){ 这→美元地位[$ killKey]=1; 返回错误; } } } }//检查ip规则 如果($ ip,,收取($ this→设置→ip)) { 如果(! $ this→checkRule (ip,这美元→设置→ip)) { 如果(科斯和美元,$ this→mc→设置(self:: PREFIX_KILL。$ ip intval中($ this→设置→杀死))){ 这→美元地位(self:: PREFIX_KILL。$ ip)=1; } 返回错误; } }//检查键规则 如果美元的钥匙,,收取($ this→设置→键)){ foreach(键为键)美元{ 如果(! $ this→checkRule ($ this→keyPrefix。关键,这美元→设置→键)){ $ killKey=self:: PREFIX_KILL。$ this→keyPrefix。美元的关键; 如果(科斯和美元,$ this→mc→集(killKey美元1 intval中($ this→设置→杀死))){ 这→美元地位[$ killKey]=1; } 返回错误; } } } 返回true; }/*更新限制规则*/公共函数更新($ c=1, $ ip=null,美元关键=null) { 如果(is_null (ip),,is_null(键)美元){ 如果(!空($ this→更新)){ foreach ($ this→更新k=美元比;$ v) { 如果(!v和美元,收取(这→美元区间[$ k])) { if ($ this→mc→添加(k、c,美元假,这→美元区间[$ k])) { 这→美元地位(self:: STATUS_UPDATE。$ k]=$ c; 继续; } } r=这→美元mc→增量(k、c美元); 这→美元地位(self:: STATUS_UPDATE。$ k)=$ r; } } 其他}{ 如果(! is_null (ip),,收取($ this→设置→ip)) { 规则=美元这→设置→ip; foreach(规则间隔=美元比;限制美元){ k=这→美元keyPrefix。美元的ip。& # 39;_ # 39;。美元区间; if ($ this→mc→添加(k、c,美元假,$间隔)){ 这→美元地位(self:: STATUS_UPDATE。$ k]=true; 继续; } r=这→美元mc→增量(k、c美元); 这→美元地位(self:: STATUS_UPDATE。$ k)=$ r; } } 如果(! is_null(美元键),,收取($ this→设置→键)){ 规则=美元这→设置→键; 如果(! is_array(键)美元){ (数组键=美元关键); 其他}{ 键=美元关键; } foreach(键为键)美元{ foreach(规则间隔=美元比;限制美元){ k=这→美元keyPrefix。美元的关键。& # 39;_ # 39;。美元区间; if ($ this→mc→添加(k、c,美元假,$间隔)){ 这→美元地位(self:: STATUS_UPDATE。$ k]=true; 继续; } r=这→美元mc→增量(k、c美元); 这→美元地位(self:: STATUS_UPDATE。$ k)=$ r; } } } } } 公共函数checkVerifyCode(键,美元代码){ servcode=这→美元mc→get (self:: PREFIX_VERIFYCODE。$ this→keyPrefix。美元的关键); 如果(strcasecmp (servcode,代码)美元==0){ (验证=intval中美元这→设置→验证); 如果验证比美元;0){ r=这→美元mc→设置(self:: PREFIX_VERIFIED。$ this→keyPrefix。关键的美元,1,假的,验证); 其他}{ $ r=true; } 如果($ r) { $ this→mc→删除(self:: PREFIX_VERIFYCODE。$ this→keyPrefix。美元的关键); } 返回$ r; } 返回错误; } 公共函数isVerified(键){ r=这→美元mc→get (self:: PREFIX_VERIFIED。$ this→keyPrefix。美元的关键); 如果(!空($ r)) { null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullphp频率限制类怎么用