Apabila menggunakan PHP password_hash() fungsi untuk mencincang kata laluan untuk simpanan dalam pangkalan data, adalah penting untuk memahami cara kata laluan yang dicincang disahkan semasa log masuk menggunakan password_verify().
Dalam kod anda, fungsi password_hash() mencincang kata laluan sebelum menyimpan ia dalam pangkalan data. Walau bagaimanapun, dalam skrip log masuk, anda secara langsung membandingkan kata laluan yang tidak dicincang yang dimasukkan oleh pengguna dengan kata laluan yang dicincang yang disimpan dalam pangkalan data menggunakan password_verify(). Perbandingan ini akan sentiasa gagal.
Cara yang betul untuk mengesahkan kata laluan menggunakan password_verify() adalah dengan menghantar kata laluan yang tidak dicincang yang dimasukkan oleh pengguna sebagai hujah pertama dan dicincang kata laluan yang disimpan dalam pangkalan data sebagai hujah kedua. Ini akan membenarkan password_verify() membandingkan dua kata laluan dengan betul.
Berikut ialah versi ubah suai skrip log masuk anda dengan pengesahan kata laluan yang diperbetulkan:
<code class="php">if($_SERVER["REQUEST_METHOD"] == "POST"){ $p_num = $_POST["username"]; $pwd = $_POST["password"]; $query = "SELECT * FROM `$user_table` WHERE `user_id` = '$p_num'"; $result = mysqli_query($connect, $query); while($row = mysqli_fetch_assoc($result)){ $user_id = $row['user_id']; $first_name = $row['first_name']; $last_name = $row['last_name']; $user_name = $first_name ." " .$last_name; $password = $row['password']; $image = $row['image']; $email = $row['email']; $program = $row['program']; $role = $row['role']; $status = $row['logged_in']; $registered = $row['registered']; // Verify the password using password_verify() if(($user_id == $p_num) && (password_verify($pwd, $password))){ $_SESSION["id"] = $user_id; $_SESSION["user"] = $user_name; $_SESSION["program"] = $program; $_SESSION["pass"] = $password; $_SESSION["image"] = $image; $_SESSION["email"] = $email; $_SESSION["role"] = $role; $_SESSION["status"] = $status; $_SESSION["registered"] = $registered; $loggedin = "UPDATE `$user_table` SET `logged_in` = 1 WHERE `user_id` = '$user_id'"; } var_dump($pwd); var_dump($password); } }</code>
Dengan menggunakan password_verify() dengan betul, anda boleh mengesahkan kata laluan pengguna dengan tepat semasa log masuk, memastikan keselamatan dan integriti sistem anda.
Atas ialah kandungan terperinci Apabila Membandingkan Hashes Kata Laluan dengan password_hash() dan password_verify(), Kata Laluan Mana Yang Perlu Diutamakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!