网站开发之用户重设密码 找回密码功能的实现原理

  次阅读 作者:智能小宝 来源:互联网 2016-01-19 12:57 我要评论(0)

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

用户流程:

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']);

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...