2013-10-18 124 views
0

我有一個奇怪的問題。錯誤的計算

我想要一個簡單的系統,如果在一秒鐘內有多個請求,就會顯示錯誤。

我做了什麼:

 if(!isset($_SESSION['protect']['mass_request_time']) || $_SESSION['protect']['mass_request_time'] = null) { 
     $_SESSION['protect']['mass_request_time'] = microtime(true); 
     $_SESSION['protect']['mass_request_request'] = 1; 
    } else { 
     $_SESSION['protect']['mass_request_request'] += 1; 
     if($_SESSION['protect']['mass_request_request'] >= 2 && microtime(true) - $_SESSION['protect']['mass_request_time'] < 1) { 
      die('Too many requests!'); 
     } elseif(microtime(true) - $_SESSION['protect']['mass_request_time'] > 1) { 
      # Reset the counter since more than a second is over 
      $_SESSION['protect']['mass_request_time'] = null; 
     } 

我不知道我做錯了什麼,我想解決的辦法是很容易的(也許只是一個計算錯誤..它已經是凌晨3點這裏)。

+0

您是否試圖在會話中存儲「全局」請求計數器?但會話是每個客戶端...還是每個客戶端每秒請求? – akonsu

回答

2

您的第一個if聲明無效。

$time = $_SESSION['protect']['mass_request_time']; 
if (!isset($time) || $time = null) 

您的代碼只是將時間設置爲null。改爲使用==

+0

ARGH。是的,這已經是晚些時候了。感謝:D – Michael