2016-08-22 28 views
0

私はデータベースに格納されているものとユーザー入力のパスワードを一致させようとしています。これまでは完璧に動作していましたが、突然奇妙な動きが始まりました。シンプル===合格に失敗した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   
    } 
} 

同じパスワードの画像を追加する。 enter image description here

+2

'var_dump($ check_password、$ row ['password'])' - それらは同じですか?同じ文字数ですか? – aynber

+0

はい、どちらも同じです。コンソールでも「Login Successful」というメッセージが表示されました。 –

答えて

0

これがこの問題を解決する正しい方法であるかどうかはわかりませんが、何とかこれがトリックでした。

$response['message'] = 'Login successful.';以降の行を追加すると問題が解決します。

echo json_encode($response); 
exit; 

は、しかし、私はまだ成功したメッセージを、ログインするまでのステートメントが正常に実行された場合のとき'Invalid Email id or password.'エラーは、表示されたか、理解することはできませんよ。

関連する問題