2016-04-28 48 views
1

阻止登錄所以我有這樣的代碼:我需要經過3次嘗試

<?php 
session_start(); 
if (!isset($_SESSION['count'])) { 
    $_SESSION['count'] = 0; 
} 
if(isset($_SESSION['count'])) { 
    $_SESSION['count']++; 
    $num = 3 - $_SESSION['count']; 
    echo $num.' login attempts left.'; 
    if($_SESSION['count'] < 0) 
    { 
     session_destroy("count"); 
     unset($_SESSION["count"]); 
     echo 'negative :/'; 
    } 

} 
if($_SESSION['count'] == 3) 
{ 
    echo 'Your session is locked for 30 minutes.'; 
    if(!$_SESSION['timeout']) 
    { 
     $_SESSION['timeout'] = time(); 
    } 
    $st = $_SESSION['timeout'] + 180; //session time is 30 minutes 
    if(time() < $st) 
    { } 
    elseif(time() >= $st) { 
     session_destroy("count"); 
     session_destroy("timeout"); 
     unset($_SESSION['count']); 
     unset($_SESSION['timeout']); 
    } 

} 
?> 

某處是一個錯誤,但我不能找到它:( 我只需要限制登錄嘗試不使用數據庫,只是簡單的會話。

你能幫助我嗎?

+0

爲什麼不使用與'write'&'read'文件? –

+0

你在哪裏檢查他們登錄? – chris85

+0

「某處是錯誤」 - 你怎麼知道有錯誤?是否顯示錯誤?腳本沒有做到它應該做的事情嗎? –

回答

0

首先,你的第二個if應該是別的我想。

if (!isset($_SESSION['count'])) { 
    $_SESSION['count'] = 0; 
} else { 
... 

否則,第一條語句將檢查$_SESSION['count']是否未設置。 如果是這樣,將其設置爲0。然後第二,如果它會被設置,然後$_SESSION['count']++;總是支持增加這個數爲1。因此,它至少會始終爲1

的第二件事情是,你不在代碼中的任何地方都不會減少計數。 所以它永遠不會達到0

如果您解釋更確切的錯誤是什麼,我們可以幫助你更好。

請記住,會議基本驗證可以通過簡單的方法來annuled。例如。每次通過tor訪問您的站點或每次達到登錄限制時都使用代理。

-1

您不需要寫入文件。用戶嘗試登錄時的Foreach時間,並返回false。你應該爲你的_SESSION ['count']加1。將該代碼放入函數中。你的_SESSION ['count']是全球性的,所以當你的用戶將被鎖定時。

+0

如果一個用戶的名字是@fred-ii而另一個是'Fred-ii'會怎麼樣? –

相關問題