首先创建一个函数来为你生成一个随机字符串,假设你需要创建一个32个字符的随机字符串,选择你想要的任意数量的字符
生成随机码的功能,随机码将通过电子邮件发送并添加到数据库
function genRandomString() {
$length = 32;
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
$string ="";
for ($p = 0; $p < $length; $p++) {
$string .= $characters[mt_rand(0, (strlen($characters))-1)];
}
return $string;
}
接下来,使用 php myAdmin 创建一个新表,该表名为 forget_passes,其中包含三列,假设您已经这样做了
$key = genRandomString(); // assign random code
$assign = $db->query("INSERT INTO `YOUR_DB_NAME`.`forgotten_pass` (`email` ,`randomKey` , `time`)
VALUES ('$email', '$key', CURRENT_TIMESTAMP );");
接下来发送一封电子邮件,其中包含指向您的 resetpassword.php 页面的链接(用户要求选择新密码并确认的页面,但不要忘记将生成的密钥分配给 get 变量,这很容易,就在您关联
www.yourdomain.com/pass_reset.php(添加?secretkey=THE_GENERATED_HERE)
因此,发送到需要重置密码的人的电子邮件地址的链接应包含以下内容:
您好用户名,要重置您的密码,请单击下面的链接或将其复制/粘贴到您的浏览器中
链接:http ://www.yourdomain.com/pass_reset.php?secretKey=a12s236d5c8d4fkejus10a1s2d4c8741
当用户点击链接时,他会进入一个页面,验证他的电子邮件和它在sql数据库中对应的随机密钥,如果发现真的有一个电子邮件和那个随机的kay,那么用户就真的确认它是电子邮件,所以此页面应包含如下内容:
<?php
if (isset($_GET['secretKey'])) {
$secretKey = $_GET['secretKey'];
// Check wether it really exist in database
$sql = 'select * from forgotten_pass WHERE email=$The_User_Email and randomKey='$secretKey'';
}
现在,只需统计行数,看看是否有返回数据,如果有返回数据,则用户是否真正连接到其收件箱并单击了链接。
只需执行以下操作:
if mysql_num_rows($sql)>0 { echo "Success, ";
?>
// in this part type the html code which displays two inputs text, password
// and confirm password that connect to database and update the user's password
<form method="post" action="passupdate.php">
<input name="password" value =""/>
<input name"confirmedPassword" value=""/>
<input type="submit" value="Save my new password">
</form>
<?php
} else {
echo "Sorry, invalid reset link";
}