PHP实现页面密码访问时输入正确密码仍触发错误1如何解决?
故障原因与解决方案
你遇到的错误1触发于password_verify($password, $hashed_password)返回false的分支,说明密码校验逻辑未通过,可按以下顺序排查:
- 优先检查数据库密码字段长度
password_hash()函数生成的哈希值默认长度为60字符,若user_confirm表的password字段类型设置为varchar(50)或更短,存储时哈希会被截断,直接导致校验失败。请将字段长度调整为varchar(255)避免兼容问题。 - 校验密码存储逻辑是否正确
确认你向user_confirm表写入密码时,是直接存储password_hash()生成的原始哈希值,没有额外做trim、转义、拼接多余字符等操作。可在代码中加临时调试语句验证:
你也可以手动拿你设置的明文密码和输出的哈希值,单独调用$hashed_password = $row["password"]; // 加入下面两行调试,输出后对比你输入的密码和库中存储的哈希是否匹配 var_dump($password, $hashed_password); exit;password_verify()测试是否返回true。 - 排除字符编码不一致问题
若密码包含中文或特殊符号,需要确认HTML页面编码、PHP文件编码、数据库连接编码、表/字段编码均统一为UTF-8(数据库推荐用utf8mb4)。 - 确认没有存储明文密码
password_verify()仅支持校验password_hash()生成的哈希值,若你入库时直接存储了明文密码,校验必然失败。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

