我正在尝试将用户输入密码与数据库中存储的密码相匹配。到目前为止,它工作得非常好但突然之间开始表现得很奇怪。
尽管信息正确,但脚本开始显示无效的电子邮件ID或密码的错误。刷新窗口显示错误后立即显示存储在$ _Session变量中的用户名(表示用户已登录)。
但是当用户没有达到用户名存储在$ _session中的点时,这怎么可能呢?
无论如何,我试图在脚本开始时取消设置会话变量,认为$ _session没有完全被破坏(尽管它已经被破坏)但是它也没有用。
我已经在 $ check_password === $ row ['密码'] 上使用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
}
}
答案 0 :(得分:0)
我不知道这是否是解决这个问题的正确方法,但不知怎的,这就行了。
在$response['message'] = 'Login successful.';
解决问题后添加以下行。
echo json_encode($response);
exit;
但我仍然无法理解,'Invalid Email id or password.'
错误是如何显示的,if语句成功执行到登录成功消息的时间。