2017-10-13 13 views

答えて

2

decayMinutes - 制限時間内にカウントされます。技術的な制限は、TTL(Time To Live)の値を$decayMinutes * 60秒に設定し、ヒットごとにインクリメントするキャッシュです。 TTLが値を超えると、キャッシュ内で自動的に破棄され、新しいヒット数が開始されます。

RateLimit::hit()コードをご覧ください。それはかなり明らかだ:

/** 
* Increment the counter for a given key for a given decay time. 
* 
* @param string $key 
* @param float|int $decayMinutes 
* @return int 
*/ 
public function hit($key, $decayMinutes = 1) 
{ 
    $this->cache->add(
     $key.':timer', $this->availableAt($decayMinutes * 60), $decayMinutes 
    ); 
    $added = $this->cache->add($key, 0, $decayMinutes); 
    $hits = (int) $this->cache->increment($key); 
    if (! $added && $hits == 1) { 
     $this->cache->put($key, 1, $decayMinutes); 
    } 
    return $hits; 
} 

あなたはdecayMinutesは、ソースコードを読むことから5.

6

私は保持時間としてdecayMinutesを理解しています。あなたが間違ったパスワードでログインしようとすると10回するが、11回試みると、ユーザはdecayMinutesで指定された分数分ブロックされます。 decayMinutesに10分を指定すると、ユーザーは10分間ブロックされます

+1

でなければならないよりも、5分ごとに10本のヒットによって、いくつかの活動を制限したい場合は、これはあまりにも私の理解です。 – fubar

+2

これは間違った答えです。 'decayMinutes'(Laravel 5.5)はブロック時間ではありません。 –

+1

私はログインブロック時間が一例だと思っていますが、スロットルのためにほとんど同じ方法で動作します。 「ログイン試行」を「要求された一意のURL」に置き換えてください。 $ decayMinutes分のページまたはAPIリクエストをしないと、スロットルカウンタがリセットされます。 –