php - 从Mysql数据库中自动删除

标签 php mysql codeigniter

我目前正在尝试创建“重置密码” 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/

相关文章:

php - 在关联数组中创建新键并向其添加值

php - 如何设置用户角色和权限?

php - 使用 AJAX 和 PHP 进行 mysql UPDATE 在两种相同情况之一中不起作用

php - 在 WooCommerce 中使用 wc_get_products 函数

php - 一张表多字段还是两表少字段?

PHP MySQL 选择最大行数返回错误的数字

sql - 数据库扩展的最佳实践是什么?

php - 在 join 的 where 子句中传递数组

php - 在 GitHub 上 stash 公共(public)协作的数据库登录信息的最佳方法是什么?

javascript - 使用POST将js变量从iframe发送到php