Tôi băm mật khẩu đã chèn của mình qua password_hash. Tôi xác minh chúng bằng cách sử dụng password_verify.password_verify không xác minh hàm băm
Tuy nhiên khi tôi chèn mật khẩu băm vào cơ sở dữ liệu của mình và tôi cố gắng xác minh, cả hai kết quả đầu ra luôn khác nhau.
trang của tôi là như sau,
main_login.php (theo mẫu):
<?php include 'header.php';?>
<body>
<form role="form" method="post" action="login.php">
<div class="form-group">
<label for="usrname">Username:</label>
<input type="text" class="form-control" name="usrname" placeholder="Enter username">
</div>
<div class="form-group">
<label for="passwrd">Password:</label>
</div>
<input type="password" class="form-control" name="passwrd" placeholder="Enter password">
<br>
<input type="checkbox">Remember Me
<br>
<br>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</body>
</html>
login.php (handler):
<?php
include 'vars.php';
include 'header.php';
$sql="SELECT * FROM members WHERE usrname='$usrname'";
$result=mysqli_query($con,$sql);
$count=mysqli_num_rows($result);
$row=mysqli_fetch_row($result);
$verify=password_verify($hash,$row[2]);
if($verify){
$_SESSION["usrname"]=$usrname;
echo "Correct";
}
else {
echo "user: " . $usrname. "<br>";
echo "pass: " . $hash. "<br>";
echo "db: " . $row[2]."<br>";
echo "Wrong Username or Password";
}
?>
vars.php:
<?php
$h='localhost';$u='caelin';$p='****';$d='ombouwnh';
$con=mysqli_connect($h,$u,$p,$d);
$usrname=$_POST['usrname'];
$passwrd=$_POST['passwrd'];
$hash=password_hash($passwrd, PASSWORD_DEFAULT);
?>
khi tôi cố đăng nhập bằng tên người dùng 'caca' và mật khẩu 'caca' Tôi nhận được một đầu ra khác nhau cho cả hai, mỗi lần tôi thử lại. Tôi không thể tìm thấy sự cố cụ thể này trên stackoverflow.
TIA
PS. Nếu bạn cần thêm chi tiết, hãy yêu cầu họ
Đảm bảo độ dài cột đủ dài để chứa mã băm; đó thường là một lỗi mà nhiều người mắc phải. –
nó là varchar (255) @ Fred-ii- – caelin
'$ row [2]' đảm bảo rằng số đó là chính xác. Đó thực sự là cột thứ 3 trong bảng của bạn, đúng không? Thêm vào đó bạn có 'session_start();' được nạp, phải không? '$ _SESSION [" usrname "]' có thể không liên quan. –