我的 php 登录文件有问题。我通过检查电子邮件向我的数据库询问密码。当我获得此密码时,我会使用用户填写的密码进行检查。结果password_verify($Passwd, $row['Passwd'])将始终返回 0,但结果应返回 1(密码匹配)。为什么我的密码不一致?登录代码:<?phpif(isset($_POST['submit'])){ include_once '../includes/connection.php'; $Email = $_POST['email']; $Passwd = $_POST['passwd']; //Create Template $sql = "SELECT Passwd FROM user WHERE Email = ?"; //Create Prepared Statement $stmt = mysqli_stmt_init($conn); //Prepare Prepared Statement if(!mysqli_stmt_prepare($stmt, $sql)){ echo "SQL Statement Failed"; } else { mysqli_stmt_bind_param($stmt, "s", $Email); mysqli_stmt_execute($stmt); $res = mysqli_stmt_get_result($stmt); while ($row = mysqli_fetch_assoc($res)){ echo $Passwd . "<br>"; echo $row['Passwd']; if(password_verify($Passwd, $row['Passwd'])){ echo "1"; } else { echo "0"; } } }} else { header("Location: ../index.php?login=error");}?>Passwd是数据库中的 varchar(50) 列。
1 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
password_hash手册说:
建议将结果存储在可以扩展超过 60 个字符的数据库列中(255 个字符是一个不错的选择)
因此,您需要为数据库中的密码列指定 60 个字符的最小大小 - 但建议使用更大的大小,例如 255,以防默认哈希算法将来发生变化。
您还需要重新生成存储在 50 个字符字段中的任何现有密码,因为它们在保存时将被截断,并且额外的信息已丢失,这意味着这些旧密码永远无法验证。
- 1 回答
- 0 关注
- 103 浏览
添加回答
举报
0/150
提交
取消