首先,我们假定你已经有了一个用户注册系统。其中用户表可能如下:
create table member(
id int unsigned not null auto_incremtnt,
username………………
passwords char(32) not null,
email varchar(100) not null,
……………………………..
);
现在讨论的焦点不是数据库设计,我们主要谈密码找回。
我们可以选择的密码找回方案可能有以下几种:
1.       用户预设找回密码问题,并且提供找回密码答案。
2.       用户通过email 找回密码
..........................
第一种方案或许是个很好的解决方案,但我们这次并不选择此方案,其中的种种原因,也不在本讨论之内。我们用第二种方案作为本次的主要讨论对象。
那么我们开始吧。
第二种方案的其中好处是:
1.      注册用户必须提供正确的邮箱,否则将不能使用系统所提供的密码重设功能。
2.      必须由该用户通过邮箱确认。
这可能对企业来说,是件好事。企业总是费劲心思的想得到用户真实的详细信息,以便进行有针对性的邮件列表服务。这也是这次开发用户要求这样做的一个主要原因。
我们可能会在login界面提供一个链接,或者在login失败后提供一个链接。链接名当然你可以自己定义了,我定义的是:忘了密码,需要找回吗?
当用户点击找加密码时,我们会提供一个input表单。让用户输入用户名(如果是login失败后,我们可以用session填充表单内容)。用户点击提交后,我们开始我们的密码重设功能流程。
我们可能会创建这样一个文件 send_reset_pass_mail.php。这个文件主要负责产生一个通过GET方法传递的字符串,并且将其发送出去。
代码可能如下:

PHP代码:
<?php
/**
 * 我们假设你已经在config.inc.php文件里配置好了你的sql信息,mail信息
*/
require_once('config.inc.php');

/**
* 你需要一下sendmail类来进行邮件发送,我们也假设你已经配置好,并且能正发送邮件
*/
require_once('sendMail.inc.php');

/**
 * 首先我们执行查询,得到此用户的相关信息
 * 你不要告诉我你不知道$_POST['username']是怎么得到的,如果是这样,我郁闷一下你。
 * 我使用了adodb的类,并且已经在配置文件中声明过
*/
$username = trim($_POST['username']);

$sql = "select email,passwords from member where username = '".trim($_POST['username'])."'";
$userInfo = $db->FetchRow($sql);

$user_pass = $userInfo['passwords'];
$user_email = $userInfo['email'];

/**
 * OK,一些需要的东西我们都有了,看来得进行下步操作了
 * 现在让我们产生一个经过md5加密码过的字符串,先不要问为什么,等会再告诉你
*/

$x = md5($username.'+'.$passwords);
//现在我们可以发送邮件给用户了。当然,我们还得需要另一个密码重设程序 resetUserPass.php
$String = base64_encode($username.".".$x);

$sendMail = new sendMail();
$subject = "你的密码找回信";
$message = "尊敬的".$username."先生/女士:<br />&nbsp;&nbsp;&nbsp;&nbsp;你使用了本站提供的密码找回功能,如果你确认此密码找回功能是你启用的,请点击下面的链接,按流程进行密码重设。<br><br>欢迎你经常访问本站。站长无喱头谢谢你经常光顾本站!<br><Br><a href='/resetUserPass.php?p=".$String.">确认密码找回</a>";

if( $sendMail->mailto($user_email,$subject,$message) )
{
       //信息发送发功了,这里可以执行其它动作。
}
else
{
       die("由于xx原因,你执行的找回密码未能成功!请登陆网站,与站长联系。谢谢");
}
?>

那么好,我们的信件已经成功发出了,哪么用户得到了一个什么样的链接呢?
可能如下:
/resetUserPass.php?p=dT1saXRvdSZ4PTAwZTc1MGZlNmZjOGNkNGYyMjgzMDA3MWJlZDNmZTAw
用户点击过后,执行我们站点的resetUserPass.php程序。

PHP代码:

<?php
require_once( 'config.inc.php' );
/**
 * 用base64_decode解开$_GET['p']的值
*/
  $array  =  explode ( '.' , base64_decode ( $_GET [ 'p' ]));

/**
 * 这时,我们会得到一个数组,$array,里面分别存放了用户名和我们需要一段字符串
 * $array[0] 为用户名
 * $array[1] 为我们生成的字符串
*/
//好了,我们开始进行匹配工作吧。

$sql  =  "select passwords from member where username = '" . trim ( $_array [ '0' ]). "'" ;

$passwords  =  $db -> GetOne ( $sql );

/**
 * 产生配置码 
*/
  $checkCode  =  md5 ( $array [ '0' ]. '+' . $passwords );

/**
 * 进行配置验证: => 
*/

if(  $array [ '1' ] ===  $checkCode  ){
        //执行重置程序,一般给出三个输入框。
        Echo  "<input name=username value='" . $array [ '0' ]. "' onlyread>" ;
       Echo  "<input name=userpasswd type=password>" ;
       Echo  "<input name=reinput type=password>" ;
}else{
        //给出定义错误页面
}

//OK了,接下来的工作是我们进行数据库更新了?这里就不再说了。。。

php 找回密码机制流程相关推荐

  1. php 找回密码思路,PHP找回密码机制流程

    笔者前段接了一个项目,其中包含了一个用户注册系统,用到了密码找回功能,简单整理一下,写点心得. 首先,我们假定你已经有了一个用户注册系统.其中用户表可能如下: create table member( ...

  2. mysql1.8找回密码_PHP+Mysql+jQuery找回密码

    通常所说的密码找回功能不是真的能把忘记的密码找回,因为我们的密码是加密保存的,一般开发者会在验证用户信息后通过程序生成一个新密码或者生成一个特定的链接并发送邮件到用户邮箱,用户从邮箱链接到网站的重置密 ...

  3. java web 找回密码_java web实现 忘记密码(找回密码)功能及代码

    java web实现 忘记密码(找回密码)功能及代码 (一).总体思路 (二).部分截图 (三).部分代码 (一).总体思路: 1.在 找回密码页面 录入 姓名.邮箱和验证码,录入后点击[提交]按钮, ...

  4. ThinkPHP 3.2 用户注册邮箱验证帐号找回密码

    一.前言 当然现在有的网站也有手机短信的方式找回密码,原理就是通过发送验证码来验明正身,和发送邮件验证一样,最终还是要通过重置密码来完成找回密码的流程. 本文将使用PHP+Mysql+jQuery来实 ...

  5. 用户绑定QQ邮箱找回密码

    其找回密码的流程如下: 第一步:输入用户名,系统查找是否存在该用户,如果存在则进行下一步,并给出用户的邮箱:否则提示"不存在该用户" 第二步:存在该用户后,则进行用户的邮箱验证,每 ...

  6. 密码找回php,PHP结合jQuery实现找回密码

    通常所说的密码找回功能不是真的能把忘记的密码找回,因为我们的密码是加密保存的,一般开发者会在验证用户信息后通过程序生成一个新密码或者生成一个特定的链接并发送邮件到用户邮箱,用户从邮箱链接到网站的重置密 ...

  7. php mysql 找回密码_PHP、Mysql、jQuery找回密码的实现代码

    所谓的密码找回功能: 并非真的能把忘记的密码找回,因为密码是加密保存的,一般开发者会在验证用户信息后通过程序生成一个新密码或生成一个特定的链接并发送邮件到用户邮箱,用户从邮箱链接到网站的重置密码模块重 ...

  8. 找回密码功能的流程总结

    公司业务里需要做密码找回的功能. 使用邮件验证的方式实现密码找回. 当用户忘记自己密码的时候 , 可以通过输入自己的邮件号 , 系统发送携带验证码的邮件号来验证用户身份. 但是使用这样的验证方式,当用 ...

  9. web系统找回密码流程

    为什么80%的码农都做不了架构师?>>>    1.前台请求后台跳转找回密码页面 2.后台生成一个captchaId,隐藏在找回密码页面,并跳转到找回密码页面 3.在找回密码页面,输 ...

最新文章

  1. Xshell上传、下载文件到linux
  2. boost::spirit模块将 QString 数据类型用作 Qi 属性的测试程序
  3. 又一本 Go 语言力作出版了
  4. 《实现领域驱动设计》读书笔记
  5. python缺失值填充均值法_pandas 使用均值填充缺失值列的小技巧分享
  6. python函数案例名片管理器_python案例:实现一个函数版的名片管理系统
  7. 华为4g模块 linux驱动程序,定制Android之4G-LTE模块驱动
  8. 那些文献阅读能力爆表的科研学子,都在偷偷做这件事……
  9. (5)散列冲突处理:开放定址法
  10. 力扣题目——705. 设计哈希集合
  11. View Controller Programming Guide for iOS---(三)---Using View Controllers in Your App
  12. python分类识别_Python构建图像分类识别器的方法
  13. iOS设备的CPU架构
  14. HTML模拟唯品会登陆和注册页面
  15. DSTC10开放领域对话评估比赛冠军方法总结
  16. 如何通过优化网站内容提高外贸网站的谷歌排名?
  17. [机器学习-数学]什么是ESS/RSS/TSS
  18. centos8安装gcc
  19. Centos7 重启后ens33消失(外部连接不上)
  20. 基于Flow链的星际征战游戏Enemy Metal将于8月4日开启首次创世NFT盲盒发售

热门文章

  1. 微信小程序中wxs文件的用法
  2. R语言使用plot函数可视化数据散点图,使用font参数指定字体类型为斜体字体(italics)
  3. 浏览器兼容模式中文乱码
  4. 【NumPy 数组连接、拆分、搜索、排序】
  5. onScrollStateChanged 和 onScroll
  6. Tita绩效宝:发展评估和绩效考核之间的区别
  7. emf是什么格式_蓝宝石:第一次尝试是基于EMF。
  8. SVM 原理详细推导
  9. 【翻译】弥补破碎的心理契约:理解说谎者和工作中的道德困境
  10. 数据库优化之 Explan(待补充)