我写了一个恢复密码的代码。其中,如果任何现有用户在必填字段中输入他的电子邮件,则在他的电子邮件中发送密码恢复链接,然后如果他点击收到的链接,则他将进入密码恢复页面。它工作得很好。
但我需要时间链接。意味着如果我在电子邮件中设置60秒密码恢复链接,则在60秒内。用户可以恢复密码,否则链接将失败。我不知道怎么办?请给我提示。
表格中的字段为:姓名,电子邮件,手机,密码,密码
update.php(用于插入电子邮件以发送恢复电子邮件链接)
<style>
updatepass.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>
答案 0 :(得分:0)
您需要在表格中添加额外的timestamp
列,因此当用户点击密码恢复时,请在此处保存一段时间。
ALTER TABLE account ADD timestamp INT
然后,当用户调用updatepass.php时,您需要将当前时间与表中保存的时间戳进行比较。
update.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