2017-10-13 107 views

回答

2

decayMinutes - 這是您的限制內的時間將被計數。技術上的限制是緩存中的TTL(生存時間)$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; 
} 

如果您想通過10次命中每5分鐘,以限制某些活動,比decayMinutes必須爲5

6

我瞭解decayMinutes作爲保留時間。對於實際情況,如果您想嘗試使用錯誤的密碼進行登錄,但如果他嘗試了11次,則用戶將被阻止達到decayMinutes中指定的分鐘數。如果您指定10分鐘作爲您的decayMinutes,用戶被阻止10分鐘

+1

從具有閱讀源代碼,這是我的理解了。 – fubar

+2

這是錯誤的答案。 'decayMinutes'(在Laravel 5.5)不是一個阻止時間。 –

+1

我猜登錄塊時間就是一個例子,它的工作方式大部分與節流相同。只需將「登錄嘗試」替換爲「請求的唯一網址」即可。如果您沒有爲$ decayMinutes分鐘發出任何頁面或API請求,那麼油門計數器將重置。 –