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

时间:2017-02-18 11:20:49

标签: php mysql passwords

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

但我需要时间链接。意味着如果我在电子邮件中设置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>

1 个答案:

答案 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