我使用CodeIgniter构建了一个小型登录和身份验证模块,允许忘记密码重置。重置发送带有URL的电子邮件,并将随机生成的值添加到数据库中的forgotten_password列,以便忘记密码的假定用户。发送的电子邮件提供了一个指向密码重置页面的链接,该页面具有随机生成的值,以便将数据库验证为段(3)。我可以在提交新密码后删除此值,但我希望在1-2小时后将其删除,因此重置用户密码将无效。我不知道怎么做?我想也许是一个cronjob,但他们提到的只是使用CLI来执行cronjobs。
我如何使用CodeIgniter执行定时任务?
答案 0 :(得分:1)
假设您使用MySQL数据库,有一种方法可以在短时间后删除行。您可以创建一个类型为RECURRING
且没有结束日期的新MySQL数据库事件,只需输入
DELETE FROM `table` WHERE `expiryTime`-UNIX_TIMESTAMP() < 1
您需要启用event_scheduler,然后添加如下代码:
CREATE EVENT test
ON SCHEDULE EVERY 10 SECOND
ON COMPLETION PRESERVE
DO
DELETE FROM `table` WHERE `expiryTime`-UNIX_TIMESTAMP() < 1
由于日期保存方法不同,比较表达式可能会有所不同。在这种情况下,字段expiryTime
将在到期时保存为unix timestamp
。
SSH命令:crontab -e
添加以下行:
0,30 * * * * php /path/to/script.php
在script.php中编写代码以查看&gt; = 120分钟的行并删除它们。
在表格中添加date_added timestamp
列。插入行时会自动设置此值。
然后编写一个执行此查询DELETE FROM [mytable] WHERE UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(date_added) > 7200
的PHP脚本。安排一个cron作业每隔一分钟运行一次。
希望有所帮助