Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL删除过期值_Php_Mysql_Email_Passwords - Fatal编程技术网

Php MySQL删除过期值

Php MySQL删除过期值,php,mysql,email,passwords,Php,Mysql,Email,Passwords,我目前正在尝试建立一个忘记密码系统,它会向用户发送带有重置令牌的电子邮件。然后,用户使用重置令牌重置其密码。实际上,重置令牌将被设置为过期(在测试期间,我使其在发送电子邮件后1分钟内过期) 在我忘记密码的php文件中,我在发送电子邮件之前就有这个权利(注意,$token是发出的令牌): 然后在我的密码重置php文件中,我有权重置密码。它基本上会清除所有过期值,因此表中不会有过期值: $purge = $con->prepare("UPDATE UserName SET resetkey =

我目前正在尝试建立一个忘记密码系统,它会向用户发送带有重置令牌的电子邮件。然后,用户使用重置令牌重置其密码。实际上,重置令牌将被设置为过期(在测试期间,我使其在发送电子邮件后1分钟内过期)

在我忘记密码的php文件中,我在发送电子邮件之前就有这个权利(注意,$token是发出的令牌):

然后在我的密码重置php文件中,我有权重置密码。它基本上会清除所有过期值,因此表中不会有过期值:

$purge = $con->prepare("UPDATE UserName SET resetkey = NULL WHERE expires < NOW()");
$purge->execute();
$purge=$con->prepare(“updateusername SET resetkey=NULL,其中expiresexecute();
我遇到的问题是,即使用户输入的令牌已过期,用户仍可以重置其密码。我确保时间是正确的(我甚至等了5分钟才确定)。但令牌将在一分钟后过期。 有人能解释一下为什么会这样吗?
谢谢

在第一次查询中,您使用的是列名“expire”。在第二个查询中,您使用的是列名“expires”。

我认为arcodesign已经给出了正确的答案,但我想知道您为什么这样解决它。对于我的项目,我总是使用重置项的
标记哈希
用户id
创建日期
创建一个单独的表

令牌哈希:在这里存储令牌的哈希,而不是令牌本身。否则,具有数据库读访问权限(SQL注入)的攻击者可能会要求为他喜欢的任何电子邮件地址重置密码,并且因为他可以看到新令牌,所以他可以使用它设置自己的密码

用户id:使用单独的表,如果重置过期,您可以随意删除该行,也可以保留该行并告诉用户要求重新重置

创建日期:我将存储创建日期(只是
NOW()
),而不是过期日期,然后应用程序可以决定此日期是否过期。您还可以在不迁移现有行的情况下更改重置链接的有效期


也许您想看看我的类,它有助于构建这样的令牌。

您还应该将resetkey设置为null,其中resetkey='$token'。这在您的设计中缺失。别忘了对$token进行real_转义以防止sql注入。听起来您只是在验证了该令牌之后才删除过期的令牌。确保按正确的顺序执行步骤@优素福穆拉真正的逃跑是什么?我听说过sql注入,我正在使用PDO查询。如果使用了错误检查/异常,则会发出不存在列的信号。添加
$con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常)就在连接打开之后。PDO调用它$con->quote($token)。您应该将token作为一个param进行传递,并绑定如下:userAh,谢谢,这是我的问题。我用Notepad++编写了这个代码,所以有什么php IDE或代码编辑器可以推荐给我。谢谢@科文申:当时,我没有一个好的推荐信给你。现在我正在使用它,并且发现它非常有用。
$purge = $con->prepare("UPDATE UserName SET resetkey = NULL WHERE expires < NOW()");
$purge->execute();