使用PHP发送密码重置电子邮件

时间:2012-10-06 23:31:41

标签: php

如果我向用户的电子邮件地址发送电子邮件并附带密码重置页面的链接,我该如何验证该链接?我应该在我的数据库中存储一些随机生成的密钥,然后再添加到链接字符串中吗? www.mydomain.com/passwordreset.html?key=abcd1234zz235然后根据数据库中存储的密钥检查此密钥?

如果这确实是正确的方法,我应该创建一些单独的表来存储这些密钥及其相应的电子邮件吗?如果答案是肯定的,那么在用户重置密码以节省数据库空间后,我应该删除这些密钥吗?

提前谢谢!

4 个答案:

答案 0 :(得分:1)

这是处理它的一种非常典型的方式。我通常会在PasswordResetKey表中添加user字段。

答案 1 :(得分:1)

  

我应该创建一些单独的表来存储这些密钥及其相应的电子邮件吗?

是的,我会这样做。

  

如果答案是肯定的,那么在用户重置密码以节省数据库空间后,我应该删除这些密钥吗?

不是因为空间而是因为交易已经完成。

你无法在这里节省空间。因为您应该在审核日志中保留密码更改事件的日志条目。

答案 2 :(得分:0)

是的,那会有用。就个人而言,我喜欢将密钥作为基于用户数据的编码字符串,然后我可以解码。例如,我可以使用字符串userid|password_hash|emailaddress,对其进行编码并发送。然后,当收到它时,我可以解码它并拆分出来。用户ID用于搜索数据库,然后验证password_hash和电子邮件,如果全部签出,我可以继续。

那就是说,你的解决方案可能更好,因为它意味着你知道是否真的要求重置。最重要的是,它很难猜测。

答案 3 :(得分:0)

看看this link,这可能会对您有所帮助。 基本上,您必须为密码重置请求创建一个表,并生成一个用于识别用户的密钥以及重置请求本身。