如何为经过验证的行为电子邮件和丢失密码计时器编写 cron 作业脚本? [关闭]

Posted

技术标签:

【中文标题】如何为经过验证的行为电子邮件和丢失密码计时器编写 cron 作业脚本? [关闭]【英文标题】:How do I write a cron job script for verified act emails & lost passwords timer? [closed] 【发布时间】:2013-08-13 04:16:54 【问题描述】:

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

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

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

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

在我将时间变量添加到方程之前,验证过程运行良好。一世 从来没有真正让忘记密码的部分起作用。

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

    delete account wereverified=0 并且自创建该行为以来已超过一个小时。 更新 temp=1 且距发送忘记密码电子邮件已超过一个小时的帐户

我的主要问题是:

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

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

    如何制作 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);
    

    我的整体方法听起来有根本缺陷吗?

请提前感谢您。

【问题讨论】:

您只需付出很少的努力就可以满足很多要求 你是说我很懒吗哈哈。我只需要指出正确的方向,我不是要求任何人为我写我所有的页面。我自己创建了验证页面,忘记了密码页面。 【参考方案1】:

据我所知,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(), ....

【讨论】:

verified 用于了解该帐户的电子邮件是否经过验证。 temp(probably couldve made better name) 用于告诉我该帐户的用户是否忘记了用户名和/或密码,并且已通过电子邮件发送了该事实说明。只有经过验证的用户才能收到此电子邮件,并且每小时只能收到一次。但是,感谢您更正了我的 Cron 脚本中的行。 :) 谢谢 rjmunro,它有效!是的,我将时间字段更改为creation_time,好主意。 :)

以上是关于如何为经过验证的行为电子邮件和丢失密码计时器编写 cron 作业脚本? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何为学生、教师、超级管理员等用户身份验证设计数据库

Firebase Auth on Web - 如何为电子邮件/密码登录添加垃圾邮件保护

如何为vertx设置一个持久的计时器,如果服务器重新启动,它不会丢失?

如何为没有附加外部通信方法的帐户创建密码重设系统?

如何为能量补充游戏编写计时器算法

如何为控制台应用程序提供密码?