例如,如果一分鐘之內產生5個標籤,提示「操作頻繁,請輸入驗證碼」。
該怎麼處理?
這個使用redis實作很方便,使用一個key來儲存提交次數,假如key為count。 每次提交時從redis取出count
如果count為空,將count值設為1,超時時間設為一分鐘,正常提交;
如果count值不為空且大於等於5則報錯提示「操作頻繁,請輸入驗證碼」;
如果count值不為空且小於5,則正常提交,count值加一。
記錄一下,每個標籤的生成時間如果規則是,一分鐘內只能產生4 個標籤,第5 個就提示報錯只需要在增加第5 個之前,比較最近的4 個中的第1個的生成時間,跟當下時間,是不是大於60 秒,如果不是就報錯。
用session記錄兩個值,一個是提交次數$count,一個是提交時間$time。每次提交時候都偵測++$count==5[條件1],如果是則time()-$time>=60秒[條件2],兩種條件都滿足則提示操作頻繁,如果只滿足條件1則$count=0;$time=time();
建議用redis快取操作
<?php try { $redis = new Redis(); // 创建实例 $redis->connect(REDIS_HOST, REDIS_PORT, REDIS_TIMEOUT); // 连接 $redis->ping(); // 确认连接已经成功 } catch (Exception $e) { die('Can not connect Redis.'); } $incrkey = 'TEST:用户:分钟'; // 每分钟缓存key $incrValue = $redis->incr($incrkey); if ($incrValue == 1) { // 设定缓存时间(键名,缓存时间[单位:秒]) $redis->expire($incrkey, 60); } else if ($incrValue >= 5) { die('操作频繁,请输入验证码'); }
這個使用redis實作很方便,使用一個key來儲存提交次數,假如key為count。
每次提交時從redis取出count
如果count為空,將count值設為1,超時時間設為一分鐘,正常提交;
如果count值不為空且大於等於5則報錯提示「操作頻繁,請輸入驗證碼」;
如果count值不為空且小於5,則正常提交,count值加一。
記錄一下,每個標籤的生成時間
如果規則是,一分鐘內只能產生4 個標籤,第5 個就提示報錯
只需要在增加第5 個之前,比較最近的4 個中的第1個的生成時間,跟當下時間,是不是大於60 秒,如果不是就報錯。
用session記錄兩個值,一個是提交次數$count,一個是提交時間$time。每次提交時候都偵測++$count==5[條件1],如果是則time()-$time>=60秒[條件2],兩種條件都滿足則提示操作頻繁,如果只滿足條件1則$count=0;$time=time();
建議用redis快取操作