-2

私の問題は、x回のログイン失敗に対してカウンターを機能させることです。MySQL の私の列は次のとおりです: ID、ユーザー名、パスワード、試行 & アドレス!

if ($result[0]['total'] == true)
{

    $_SESSION['userLogin'] = $result[0]['total'];
    $_SESSION['isLoggedIn'] = $login;
    header('location: index.php?id=home');
    $db->query("UPDATE authenticate SET attempts=0, adress='$ip' WHERE username='$login'");
    exit;
}
else
{
    $rs = mysql_query('SELECT id,username,password,attempts,address FROM authenticate WHERE username = '.$username.'');
    $num = mysql_num_rows($rs);
    if ($row['attempts'] > 3) {
        // Redirect to captcha
        header('location: captcha.php');
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
        if ($row['address'] != $ip) {
        // New ip adress, reset failed logins
        $failed_logins = 0;
        } else {
        // Increment failed logins
        $failed_logins = $row['attempts']+1;
        }
        mysql_query('UPDATE authenticate SET attempts = '.$failed_logins.',address = '.$ip.' WHERE id = '.$row['id'].' ');
    }
header('location: index.php');
exit;
}
4

1 に答える 1

2

データベースカウンターは必要ありません。代わりに、attemptsというセッションを作成し、それをインクリメントします。データベースを使用すると、セッションを使用してそれをインクリメントするよりも遅くなり、効率が低下します:)これにより、問題が解決し、コーディングの使用量が減ります。これが私のアイデアを使用したコードで、これも機能するはずです。

//Checks if the user is logged in
if ($result[0]['total'] == true){
    //Sets the users login
    $_SESSION['userLogin'] = $result[0]['total'];
    //Sets the loggedin variable
    $_SESSION['isLoggedIn'] = $login;
    //Resets the attempts
    $_SESSION['attempts'] = 0;
    //Redirects to index.php?id=home
    header('location: index.php?id=home');
    exit;
}else{
    //Checks if the attempts are greater than three
    if ($_SESSION['attempts'] > 3) {
        // Redirect to captcha
        header('location: captcha.php');
    } else {
        //Increments the session variable
        $_SESSION['attempts'] = $_SESSION['attempts'] + 1;
        //Goes back to the index page
         header('location: index.php');
         exit;
    }
}
exit;
于 2013-02-10T12:12:15.790 に答える