我目前正在尝试创建“重置密码” token 。当我网站上的某人想要重置其密码时生成的 token 。目前,一旦创建了 token ,我就会将其保存在我的数据库中。我想让 token 在数据库中仅存在 24 小时,然后自动删除自身,但我不知道如何执行此操作。任何帮助将不胜感激。
我通过创建一串随机字符来非常简单地生成 token 。然后我将 token 和忘记密码的电子邮件保存在数据库中,如下
'INSERT INTO reset_token (token, email) VALUES ("'.token.'", "'.email.'")'
最佳答案
编辑
这可以使用 Event Scheduler 来完成。您需要使用CREATE EVENT
创建一个事件语法。
要删除条目,您可以执行以下操作:
public function schedule_delete($table, $column, $value, $hours = 24) {
$sql = "CREATE EVENT `delete_{$table}_{$column}_$value`
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL $hours HOUR
DO DELETE FROM `$table` WHERE `$column` = '$value'";
$db->query($sql);
}
请注意,名称必须是唯一的。这意味着 delete_{$table}_{$column}_$value
必须是唯一的,否则您将收到错误。
要使 MySQL 事件正常工作,事件调度程序必须处于开启状态。您可以使用以下查询将其打开:
SET GLOBAL event_scheduler = ON;
<小时/>
当您说“自动删除”时,您需要“自动删除”。
如果由于您位于共享托管服务器上并且没有足够的权限而无法打开调度程序,您可以通过检查条目的时间戳来手动删除条目。
因此代码中的某处需要有一个执行删除操作的查询。要删除过期条目,您需要知道它们是否过期。为此,您需要将时间戳
与 token 一起存储。
现在您将其放在哪里取决于您想要删除过期条目的频率。在OP的情况下,它可以在检查 token 有效性的代码行之前完成。即,如果有一个函数 validate_token
可以查看该 token 是否存在于数据库中并且有效,您可以将其放在该函数的开头。
function validate_token($token) {
$expiry = time() - 60*60*24;
// perform query to delete all tokens that have a timestamp less than $expiry
// Now run the query to check if the token exists in the database.
// You have only valid tokens left!
}
关于php - 从Mysql数据库中自动删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46851748/