所以我目前正在为网站设计忘记密码功能。基本上,当用户点击忘记密码时,它会向他们发送一封带有重置令牌的电子邮件。我希望重置令牌在 48 小时内到期(出于安全原因)。我将如何在 MySQL 和 PHP 中执行此操作。我的表中有一个名为 resetkey 的列,当 48 小时结束时,我希望系统清除与用户用户名关联的 resetkey/令牌。
谢谢!
在您的resetkey列旁边放置一DATETIME列名为,也许,expires。
然后,每当您插入新的重置键时,还要在 expires 中插入一个值:
INSERT INTO forgot (resetkey, expires) VALUES (whatever, NOW() + INTERVAL 48 HOUR)
Run Code Online (Sandbox Code Playgroud)
在您从表中读取任何重置键之前,请执行以下操作:
DELETE FROM forgot WHERE expires < NOW()
Run Code Online (Sandbox Code Playgroud)
那么你将永远不会看到过期的密钥;如果它们过期了,它们总是会被消灭。
现在,您可以选择通过查找用户提供的重置密钥来执行某些操作。如果它已过期,您可以向用户宣布:“您的重置密钥已过期。” 但这是个坏主意……为了安全起见,您不应该帮助用户理解为什么像重置密钥这样的安全令牌无效。您应该只说“重置密钥不正确”。
这是否有可能使某些包含过期令牌的行保留在表中?是的。但是,如果您在使用任何令牌之前按照清除过期令牌的程序进行操作,则您的应用程序将无法实际读取和使用它们。如果您有理由避免将过期的令牌保留在表中,即使它们没有用,您可以设置一个 EVENT 或某种其他类型的定期作业来运行DELETE我提到的语句。
| 归档时间: |
|
| 查看次数: |
6137 次 |
| 最近记录: |