Php 重置密码程序

Php 重置密码程序,php,Php,我正在为用户制作一个php程序,以便在他们忘记密码时重置密码,我想知道我应该如何将url发送到用户的电子邮件以供单击。我曾考虑对他们的用户id进行加密和解密,以知道该为哪个用户更新密码,但我想知道是否有更好的方法 例如:如果用户id为25,我会将25加密为类似f63bfjf7eh3的内容,然后向用户发送一封包含url的电子邮件,例如,然后在用户单击链接并将密码更新为该用户id时解密该代码 抱歉,如果这不合理,我不太擅长解释。使用好的算法(如SHA256)生成唯一的哈希。需要是独特的,不可预测的。

我正在为用户制作一个php程序,以便在他们忘记密码时重置密码,我想知道我应该如何将url发送到用户的电子邮件以供单击。我曾考虑对他们的用户id进行加密和解密,以知道该为哪个用户更新密码,但我想知道是否有更好的方法

例如:如果用户id为25,我会将25加密为类似f63bfjf7eh3的内容,然后向用户发送一封包含url的电子邮件,例如,然后在用户单击链接并将密码更新为该用户id时解密该代码


抱歉,如果这不合理,我不太擅长解释。

使用好的算法(如SHA256)生成唯一的哈希。需要是独特的,不可预测的。可以使用诸如microtime(true)、现有密码哈希(哈希正确吗?)。重置密码也很好 在PHP中,您需要创建一个表,例如tbl_reset_pass

with fields id (unique, int(2), primary key and auto incremental), user_id (int(2), foreign key related with user table) and token (varchar)
当用户要求重置密码时,请通过电子邮件等方式验证该请求。。。 在您应该生成一个令牌(该令牌是将用于与链接一起发送的编码字符串)之后,发送编码的用户id是不安全的

所以链接应该是相同的

但是在resetpass.php中 需要像这样获得代码

$code = (!empty($_GET['code'))?base64_decode($_GET['code']):'';
然后您可以使用SQL查询,如

SELECT * FROM tbl_reset_pass WHERE token = '$code'; 
获取要为哪个用户执行重置密码

若上述查询的结果行数正好为1,那个么您可以重定向用户以更改密码页面

在SQL查询中使用MySQL escape工具之前,不要忘记在$code中使用它,因为它可以包含SQL注入


当用户更改新密码时,从tbl_reset_pass中删除记录

@Script47这不会在这里讨论。没有代码可供检查。而且,用户请求帮助实现某些东西,这也是离题的。@SirPython deleted,我的错误。令牌也可以用md5或sha256散列,所以不能轻易破解如果我只是在users表中添加了一个新列,并以相同的方式使用它,但不是删除它,而是将其设置为Null,这样做也可以,但在复杂的项目中,最好使用一个新表
with fields id (unique, int(2), primary key and auto incremental), user_id (int(2), foreign key related with user table) and token (varchar)