PHP:从哈希密码检索并将哈希密码保存到数据库

时间:2018-10-03 00:21:05

标签: php mysql

我使用以下代码保存用户信息:

$hashed = password_hash($password, PASSWORD_DEFAULT);

然后是我的插入查询,如下所示:

INSERT INTO users (username, password) VALUES ('$username', '$hashed');

当我使用普通的select语句检索密码并将密码的值传递给密码的输入类型时,文本框将使用哈希形式的密码。然后,我只对用户名进行更改,并更新为:

UPDATE users SET username = '$username', password = '$hashed' WHERE id = 1;

已哈希的密码将重新哈希,从而更改原始密码。这将导致用户无法登录。有帮助吗?

2 个答案:

答案 0 :(得分:0)

然后不要更新密码列!您的问题就解决了。 或者,如果您必须以某种方式使用先前的哈希密码进行更新,请查询先前的哈希密码并将其存储到未更改的变量中。然后只需查询更新即可。

答案 1 :(得分:0)

在密码输入中不打印数据库中的哈希密码。只需打印用户名,然后保存新的用户数据,即可检查用户是否还在输入中设置了任何密码。如果是,则:UPDATE users SET username=...,password=... WHERE ...。 如果未设置密码,则在没有密码部分的情况下执行相同的查询。

如果您真的对当前代码非常满意,那么只需在执行UPDATE语句之前检查密码是否与旧的哈希密码相同即可。如果是,则进行不带密码部分的UPDATE查询;如果否,则进行旧查询。