私はデータベースに格納されているものとユーザー入力のパスワードを一致させようとしています。これまでは完璧に動作していましたが、突然奇妙な動きが始まりました。シンプル===合格に失敗したPHP
スクリプトがエラーを表示し始めました情報が間違っていても、無効な電子メールIDまたはパスワードがあります。画面を更新する$ _Session変数(ユーザがログインしていることを意味します)に格納されているユーザ名が表示された直後に表示されます。
しかし、$ _sessionにユーザー名が格納されるまでにユーザーが到達しなかった場合、これはどのように可能ですか。
とにかく、$ _sessionが完全に破壊されていないと思ってスクリプトの冒頭でセッション変数を設定しようとしましたが、それもうまくいきませんでした。
私はすでに$ check_password === $ row ['password']でstrcmpを使ってテストしましたが、成功しませんでした。私はこれを "=="演算子でテストしましたが、運はありません。
驚いたことに、私はlocalhostでこれを試してみるとうまくいきますが、サーバー上では前述のようにエラーが発生します。
エラーログを確認しましたが、何もありませんでした。どんな手がかり、これを引き起こしている?
foreach($result as $row)
{
$pass = hash('sha256', $_POST['password'] . $row['salt']);
for($round = 0; $round < 65536; $round++) { $check_password = hash('sha256', $pass . $row['salt']); }
if($check_password===$row['password'])
{
// check if e-mail verification has been done or not
if(strcmp($row['activation'],"Active")==0)
{
$_SESSION['username'] = $row['username'];
$response['status'] = 'success';
$response['message'] = 'Login successful.';
}
else
{
$response['status'] = 'failure';
$response['message'] = 'Your Account is Not verified Yet. Kindly verify your account via Login panel Verify Account link.';
}
}
else
{
$response['status'] = 'failure';
$response['message'] = 'Invalid Email id or password.'; <--- Error point
}
}
'var_dump($ check_password、$ row ['password'])' - それらは同じですか?同じ文字数ですか? – aynber
はい、どちらも同じです。コンソールでも「Login Successful」というメッセージが表示されました。 –