搜尋

首頁  >  問答  >  主體

php - 固定時間內不能提交多次?

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

該怎麼處理?

仅有的幸福仅有的幸福2763 天前747

全部回覆(4)我來回復

  • PHPz

    PHPz2017-05-27 17:44:53

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

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

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

    3. 如果count值不為空且小於5,則正常提交,count值加一。

    回覆
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-27 17:44:53

    記錄一下,每個標籤的生成時間
    如果規則是,一分鐘內只能產生4 個標籤,第5 個就提示報錯
    只需要在增加第5 個之前,比較最近的4 個中的第1個的生成時間,跟當下時間,是不是大於60 秒,如果不是就報錯。

    回覆
    0
  • 怪我咯

    怪我咯2017-05-27 17:44:53

    用session記錄兩個值,一個是提交次數$count,一個是提交時間$time。每次提交時候都偵測++$count==5[條件1],如果是則time()-$time>=60秒[條件2],兩種條件都滿足則提示操作頻繁,如果只滿足條件1則$count=0;$time=time();

    回覆
    0
  • 世界只因有你

    世界只因有你2017-05-27 17:44:53

    建議用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('操作频繁,请输入验证码');
    }

    回覆
    0
  • 取消回覆