0

PHPログインスクリプト(下記)に問題があります。誰かが存在しないユーザー名を入力した場合は nouser.php にリダイレクトし、間違ったパスワード (ただし有効なユーザー名) が入力された場合は wrongpass.php にリダイレクトします。以下のコードはほぼ動作します。間違ったパスワード セクション全体をコメント アウトすると、nouser セクションは正常に機能し、nouser ページが表示されますが、間違ったパスワード セクションをそのままにしておくと、nouser と間違ったパスワードの両方の状況で wrongpass.php ページが表示されます。有効なユーザーを入力してもパスワードが間違っていると、間違ったパスワードが取得されます (正しい動作)。簡単に言えば、この名前のnouserがあり、wrongpass.phpページではない場合、nouser.phpにリダイレクトされるようにするにはどうすればよいですか..

<?php
            $username = $_POST['username'];
$password = $_POST['password'];
//connect to the database here

require_once 'includes/login.php';
$db_server = mysql_connect($db_hostname, $db_username, $db_password);
if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());

mysql_select_db($db_database, $db_server)
    or die("Unable to select database: " . mysql_error());


$username = mysql_real_escape_string($username);
$query = "SELECT password, salt
        FROM users
        WHERE username = '$username';";
$result = mysql_query($query);
//wrong user section
if(mysql_num_rows($result) < 1) //no such user exists
{
    header('Location: nouser.php');
}
//wrong password section
$userData = mysql_fetch_array($result, MYSQL_ASSOC);
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password) );
if($hash != $userData['password']) //incorrect password
{
    header('Location: wrongpass.php');
}
//login successful


?>
4

1 に答える 1

1

スクリプトを停止するには、die() を追加する必要があると思います

if(mysql_num_rows($result) < 1) {
    header('location:nouser.php');
    die();
}

まだコードをテストしていません。

于 2013-05-15T16:29:57.793 に答える