我想在忘记密码时向用户发送电子邮件,提示他们重置密码。我知道这是有争议的,正在寻找一些好的选择/建议/方法/文章可供选择。
我正在提示用户使用简单的脚本按下'忘记密码'链接,PHP部分执行此操作:
$Email = $_POST['email'];
$success = false;
$formError = false;
if(isset($_POST['sub_forgot_pw'])) {
if(empty($_POST['email'])) {
$formError = "true";
$error = "Please enter your e-mail address.";
}else{
$to = $Email;
$subject = "Password Help";
$message = "To reset your password, please <a href='http://www.blahblahblah.org'>Click here</a><br /><br />Do LIFE,<br /> The Team";
$from = "CysticLife <noreply@cysticlife.org>";
$headers = 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n";
$headers .= "From: $from";
if(mail($to, $subject, $message, $headers));{
$success = "true";
}
}
}
答案 0 :(得分:11)
这就是我的所作所为:
我有reset_password表。当有人要求重置时,他们通常会点击您网站上的“忘记密码”链接,在该链接中他们输入他们注册的电子邮件,系统会发送链接。 当然,您首先要找出用户是否已注册。从用户中选择email = $ _POST ['email']。 如果存在,则创建一个随机生成的令牌,如
$token = md5($_POST['email'].time());
但正如Buh Buh在下面的评论中表达的那样,你可能想要使用一些不太明显的东西来生成你的令牌。如果您愿意,crypt()可以接受盐模式。
在reset_password表中插入请求(电子邮件和令牌),然后向他们发送类似
的链接http://www.domain.com/resetpassword.php?token=<?php echo $token; ?>
然后在该文件中,您获取$ _GET ['token']并将其与reset_password表交叉引用。如果令牌有效,则向您提供一个要求提供新密码的表单。 提交后,选择具有与该令牌相关的电子邮件地址的用户并更新用户表。
答案 1 :(得分:1)
任何嗅网络的人都有丢失网址的危险。为避免这种情况,您可以生成随机短键,例如vX4dq,并将其保存在数据库中。要求用户记住这一点。当用户通过链接重置时,请他/她输入只有他知道的密钥。
高级: - 您可以在验证码中显示此密钥,以便它不会被嗅探。