gpt4 book ai didi

php - 在电子邮件中设置密码恢复时间

转载 作者:行者123 更新时间:2023-11-29 19:23:13 27 4
gpt4 key购买 nike

我写了一个恢复密码的代码。其中,如果任何现有用户在必填字段中输入他的电子邮件,则密码恢复的链接会发送到他的电子邮件上,然后如果他单击收到的链接,那么他将进入密码恢复页面。它工作得很好。

但我需要时间链接。意味着如果我在电子邮件中设置 60 秒的密码恢复链接,则在 60 秒内。用户可以恢复密码,否则链接将失败。我不知道该怎么办?请给我提示。

表中我的字段是:姓名、电子邮件、手机、密码、通行码

update.php(用于插入电子邮件以发送恢复电子邮件链接)

  <?php
include("connection.php");
extract($_POST);
if(isset($email)==true)
{
$query=mysql_query("select * from account where email='$email'") or die(mysql_error());
$result=mysql_num_rows($query);

if($result==1)
{
$salt = "498#2D83B631%3800EBD!801600D*7E3CC13";
$restkey = hash('sha512', $salt.$email);

mysql_query("update account SET passcode='$restkey' where email='$email'") or die(mysql_error());

$to="$email";
$subject="Password Reset";
$pwrurl = "demo.cstechnology.net/updatepass.php?restkey=".$restkey;
$message="To reset your password, please click the link below. If you cannot click it, please paste it into your web browser's address bar.\n\n" . $pwrurl . "\n\nThanks,\nThe Administration";
$header="FROM:vinubangs@gmail.com";
mail($to,$subject,$message,$header);

}
else
{
echo "Invalid Email";

}
}

?>
<form action="" method="post">
<table>
<tr><td>Email</td><td><input type="email" required name="email" /></td></tr>
<tr><td></td><td><input type="submit" name="submit" value="submit" /></td></tr>
</form>

updatepass.php(点击电子邮件上的恢复电子邮件链接后。密码将更新)

  <?php
session_start();
include("connection.php");
extract($_REQUEST);
extract($_POST);

if(isset($submit)==true)
{
$query=mysql_query("update account SET password='$password' where passcode='$restkey'") or die(mysql_error());
echo"Password Updated Successfully";
}



if(isset($restkey)==true)
{

echo"<form action='' method='post'>
<table>
<tr><td>Password</td><td><input type='password' required name='password' /></td></tr>
<tr><td></td><td><input type='submit' name='submit' value='submit' /></td></tr>
</form>";
}
?>

最佳答案

您需要在表中添加额外的 timestamp 列,以便当用户单击密码恢复时在此处节省时间。

ALTER TABLE account ADD timestamp INT

然后,当用户调用 updatepass.php 时,您需要将当前时间与表中保存的时间戳进行比较。

更新.php

$resettimestamp=time();
$query=mysql_query("update account set timestamp=$resettimestamp where email='$email'");

updatepass.php

$query=mysql_query("select timestamp from account where email='$email'") or die(mysql_error());    
$row = mysql_fetch_row($query);
$timestamp=$row[0];
$currtime=time();
$timewindow=60; // 60 seconds
if ($currtime-$timestamp<=$timewindow) {
//your logic to reset password
}
else {
//Tell the user that he is too slow )
}

另请注意,PHP 7.0 不再支持 mysql,因此如果可能,请使用 mysqli 代替

关于php - 在电子邮件中设置密码恢复时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42314461/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com