忘记密码 - 我应该添加哪些字段?

时间:2011-11-01 12:38:38

标签: php mysql

我正在处理忘记密码功能。

用户在忘记密码页面上键入他们的电子邮件地址,然后通过电子邮件发送哈希标记链接。

令牌看起来像这样:

http://www.domain.com/account/resetpassword/4u240238402348239048092384908239080

如果用户点击该链接,那么它将从用户users表中搜索散列令牌。如果找到,则显示文本字段以更改密码。

我将使用hash("sha256",...)函数生成哈希值。

哈希应该如何存储在users表中?

我是否需要添加“reset_hash”和“reset_date”等字段?

4 个答案:

答案 0 :(得分:4)

是的,您应该添加两列:一列用于重置哈希,另一列用于发布重置时的时间戳。后者应该用于确保密码在特定时间范围内重置。

一旦密码重置发生,也应删除散列和/或时间,以防止将来使用相同的散列进行重置。

答案 1 :(得分:1)

是的,将这些字段存储在users表中是一个好主意。您可以检查哈希是否有效并阻止它将reset_date设置为实际的日期时间。也可以存储expire_date字段。

答案 2 :(得分:1)

将散列存储为varchar(256)并且您可能需要一个请求日期,我会在收到请求时使用存储time()的int字段,以便您可以简单地执行一次() - {dbtime}如果它超过某个值,那么请求已经超时。

编辑:如上所述,您应该在请求完成后将这两个字段设置为NULL。

答案 3 :(得分:1)

你想做正确的事,但我建议为这样的一次性动作创建一个单独的表。对我而言,用户表似乎不是存储此信息的正确位置。

如果您创建一个单独的表,您可以稍后添加其他类型的操作,如电子邮件确认等,并添加有效期等字段。如果操作已执行,您只需从表中删除该条目即可。