欢迎来到山村网

网站如何设计用户密码重设功能

2019-03-02 11:06:59浏览:246 来源:山村网   
核心摘要:  因为要做一个带有会员系统功能,本人需要设置的是用户注册如果忘记密码就需要重设置密码了,那么要如何设计密码重设功能?怎

  因为要做一个带有会员系统功能,本人需要设置的是用户注册如果忘记密码就需要重设置密码了,那么要如何设计密码重设功能?怎么做才合理呢,下面我们一起来看看。

  用户流程:

  1.用户忘记密码,来到密码重设界面

  2.用户输入Email地址,点击重设密码按钮

  3.用户收到一封密码重设邮件,里面有重设密码的链接,此链接有过期时间

  4.用户点击链接,来到密码重设页面,输入新密码,完成

  这个流程并没有什么创新,很多网站都是用这套流程

  后端实现方式:

  1.当用户输入Email地址后,验证这个Email,如果存在于数据库,那么取得用户的user_id

  2.将user_id和当前时间戳编码成HASH,需要提前准备好一个KEY,并且这个KEY只存在服务器上。 HASH = md5 ( user_id + timestamp + KEY )

  3.生成一个URL,并且附带刚刚生成的HASH和用户id以及timestamp,比如 http://domain.com/reset-password.php?hash=HASH&user_id=123×tamp=1392121211

  4.当-三-联-用户访问这个URL, 检查HASH是否合法: HASH == MD5 ( user_id + timestamp + KEY)

  5.检查 timestamp 是不是过期了

  6.如果所有检查通过,那么显示一个新密码表单给用户

  这种方式的好处:

  1.不需要额外的数据表

  2.不用担心参数被用户恶意修改,因为要检查hash是不是等于那几个参数的md5

  3.密码重设URL自带时间戳

  4.只要KEY设置的足够长足够复杂,那么可以认为HASH是绝对安全的

  例

  send-reset-email.php:

代码如下 复制代码


$KEY = "something really long long long long long and secret";
$email = $_POST['email'];
$user = get_user_by_email($email);
if ($user && $user['id'])
{
$time = time();
$hash = md5( $user['id'] . $time . $KEY);
$url = "http://domain.com/reset-password-form.php?id=".$user['id'].'&timestamp='.$time.'&hash='.$hash;
send_email($email, 'reset password email from xxx.com', ' Please click the following link to reset password'. $url);
}

  reset-password-form.php:

代码如下 复制代码


$KEY = "something really long long long long long and secret";
$hash = $_GET['hash'];
$user_id = $_GET['id'];
$timestamp = $_GET['timestamp'];

if ($hash == md5( $user_id . $timestamp . $KEY ))
{
if ( time() - $timestamp > 3600 ) // one hour
{
die('link expired');
}
}
else
{
die('invalid parameters');
}

//validation passed

if ($_POST['new_password'])
{
reset_user_password($user_id, $_POST['new_password']);
die(' password changed successfully ');
}
else
{
echo '
<form action="reset-password-form.php?hash=$hash&id=$user_id&timestamp=$timestamp" method="post">
new password: <input type="password" name="new_password">

<input type="submit" value="submit">
</form>
';
}

(责任编辑:豆豆)
下一篇:

百度编辑器ueditor前台代码高亮无法自动换行解决方法

上一篇:

XML操作类

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com