php - 固定時間內不能提交多次?
仅有的幸福
仅有的幸福 2017-05-27 17:42:53
0
4
739

例如,如果一分鐘之內產生5個標籤,提示「操作頻繁,請輸入驗證碼」。

該怎麼處理?

仅有的幸福
仅有的幸福

全部回覆(4)
PHPzhong

這個使用redis實作很方便,使用一個key來儲存提交次數,假如key為count。
每次提交時從redis取出count

  1. 如果count為空,將count值設為1,超時時間設為一分鐘,正常提交;

  2. 如果count值不為空且大於等於5則報錯提示「操作頻繁,請輸入驗證碼」;

  3. 如果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('操作频繁,请输入验证码');
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板