-2

如何为经过验证的行为电子邮件和丢失密码计时器编写 cron?

我在带有 mysql 数据库和 php 代码的 Linux 服务器上使用 apache。在数据库中,除了帐户的常用字段外,我还验证了(一个布尔值,1 表示是,0 表示否),act_key (varchar(50) 用于向用户发送电子邮件,其中包含用于验证其电子邮件的特殊页面的链接或者如果他们忘记了密码)、时间(日期时间)和温度(布尔值,1 表示忘记密码,0 表示没有)。

当用户创建帐户时,我将新行为中的验证设置为 0,时间=当前日期和时间,临时=0,并生成我通过电子邮件发送给他们的 act_key。如果他们尝试登录并且未验证行为,则他们无法进入。如果他们单击链接并在一小时内转到某个页面,我将已验证设置为一个,他们可以登录。如果他们在一小时后点击链接,那么我告诉他们密钥无效并且该帐户已被删除并创建一个新帐户。

如果用户忘记了密码,他们会进入这个页面,输入他们的电子邮件,如果电子邮件与数据库中的记录匹配,我设置 temp=1 和 time=current date & time。我告诉用户我无论如何都发送了电子邮件。如果他们点击这个新链接,它会转到一个页面,如果它不到一个小时,我会让他们在那里重置密码,并将 temp 设置回零。如果他们在一小时后点击链接,我会告诉他们密钥无效。一小时后温度设置回零。

验证过程运行良好,直到我将时间变量添加到方程中。我从来没有真正让忘记密码的部分工作。

我知道我需要设置一个 cron 作业来每小时做两件事:

  1. 删除帐户已验证=0,并且自创建该行为以来已超过一个小时。
  2. 更新 temp=1 的帐户,距发送忘记密码电子邮件已超过一个小时

我的主要问题是:

  1. 我是否在我的数据库中为时间字段使用了正确的数据类型?如果不是,我应该使用哪个?

  2. 如何设置时间变量?$time = getdate(); 也许,默认为空?$time 是我用来插入时间字段的 dB 记录的变量。

  3. 如何制作 cron 脚本?我正在使用godaddy,我只是将cron控件指向这个php文件吗?如果是这样,这是我需要的代码吗?

    //connect to cron
    
    /web/cgi-bin/php5 -f "$HOME/html/hourly.php";
    
    //connect to dB
    
    include 'db_connect.php'; 
    
    //delete any unverified email act records that are more than 1 hour old
    
    DELETE from members WHERE verified == 0 & time + 1 > NOW()
    
    //make temp=0 on any record where temp is 1 for more than an hour
    
    UPDATE members SET temp=0 WHERE temp == 1 & time + 1 > NOW()
    
    mysqli_close($mysqli);
    
  4. 我的整体方法听起来有根本缺陷吗?

请提前感谢您。

4

1 回答 1

0

据我所知,temp是没用的。这与未经验证的含义相同。

此 SQL 已损坏:

DELETE from members WHERE verified == 0 & time + 1 > NOW();
  • &是位运算符。你要AND
  • SQL 使用单===
  • 您将删除不到一小时、不超过一小时的帐户

尝试:

DELETE FROM members WHERE verified = 0 AND time + 1 < NOW();

Datetime 是正确的时间字段类型,但我会命名该字段creation_time或其他名称,以便您了解它的含义。NOW()您可以通过传递给 SQL来设置它的值,例如INSERT INTO members SET time=NOW(), ....

于 2013-08-11T22:14:00.483 回答