上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.6 找回密码
1.6.1 找回密码功能概述
找回密码功能用到的技术也是邮箱技术。用户输入正确的账号、密保问题、密保答案后,系统将随机生成的一组数字发送到用户的邮箱中,用户可以通过邮箱来得到新密码。找回密码页面的运行结果如图1.13所示。
图1.13 找回密码页面的运行结果
1.6.2 找回密码功能实现过程
找回密码操作从单击主页中的“找回密码”按钮开始,在弹出的found.php文件中,创建一个表单,提交找回账号、密保问题和密保答案,并且载入xmlhttprequest.js和found.js脚本文件。found.php的关键代码如下:
<link rel="stylesheet" href="css/style.css" /> <script language="javascript" src="js/found.js"></script> <script language="javascript" src="js/xmlhttprequest.js"></script> <div id="fdbgdiv" > <div id="top"> >>密码找回</div> <div id="foundnamediv">找回账号: <input id="foundname" type="text" style=" width: 100px; height:15px; border:1px #000000 solid; " /></div> <div id="foundnamediv">密保问题: <input id="fdquestion" type="text" style=" width: 100px; height:15px; border:1px #000000 solid; " /></div> <div id="foundnamediv">密保答案: <input id="fdanswer" type="text" style=" width: 100px; height:15px; border:1px #000000 solid; " /></div> <div id="foundnamediv" align="center"><button id="step1"></button></div> </div>
在found.js文件中,调用found_chk.php文件,完成密码的找回操作,其关键代码如下:
function $(id){ return document.getElementById(id); } window.onload = function(){ $(' foundname' ).focus(); $(' step1' ).onclick = function(){ if($(' foundname' ).value ! = ' ' && $(' fdquestion' ).value ! = ' ' && $ (' fdanswer' ).value ! = ' ' ){ @@ xmlhttp.open(' get' , ' found_chk.php? foundname=' +$(' foundname' ).value+' &question =' +$(' fdquestion' ).value+' &answer=' +$(' fdanswer' ).value, true); xmlhttp.onreadystatechange = function(){ if(xmlhttp.readyState == 4 && xmlhttp.status == 200){ msg = xmlhttp.responseText; if(msg == '1' ){ alert(’找回密码成功,请登录邮箱注册邮箱!' ); window.close(); }else{ alert(’填写信息错误!' ); } } } xmlhttp.send(null); }else{ alert(’请填写完成信息’); $(' foundname' ).focus(); return false; } } }
在found_chk.php文件中,对用户提交的密保问题和密保答案进行验证,如果正确则生成新的密码,并且更新数据库中存储的密码,同时将新密码发送到用户注册时填写的邮箱中。found_chk.php的关键代码如下:
<? php include_once ' conn/conn.php' ; require_once ' Zend/Mail.php' ; //调用发送邮件的文件 require_once ' Zend/Mail/Transport/Smtp.php' ; //调用SMTP验证文件 $reback = '0' ; $name = $_GET[' foundname' ]; //获取用户名 $question = $_GET[' question' ]; //获取密码保护问题 $answer = $_GET[' answer' ]; //获取密码保护的答案 $sql = "select email from tb_member where name = ' ".$name."' and question = ' " .$question."' and answer = ' ".$answer."' "; //定义查询语句 $email = $conne->getFields($sql,0); //判断用户提交的用户密保是否正确 if($email ! = ' ' ){ //如果正确则执行如下操作 $rnd = rand(1000, time()); //生成随机数 //更新密码 $sql = "update tb_member set password = ' ".md5($rnd)."' where name = '".$name."' and question = ' ".$question."' and answer = ' ".$answer."' "; $tmpnum = $conne->uidRst($sql); //执行更新操作 if($tmpnum >= 1){ //发送密码邮件 $subject="找回密码"; $mailbody=’密码找回成功。您账号的新密码是’.$rnd; $envelope["from"]="cym3100@163.com"; //$envelope="mrsoft8888@sohu.com"; //网络版定义登录使用的邮箱 /*smtp测试版发送邮件方式,使用SMTP作为服务器*/ $tr = new Zend_Mail_Transport_Smtp('192.168.1.247' ); $mail = new Zend_Mail(); $mail->addTo($email, ’获取用户新密码’); $mail->setFrom(' cym3100@163.com' , ’明日科技典型模块程序测试邮箱,修改用户 注册密码!' ); $mail->setSubject($subject); $mail->setBodyHtml($mailbody); //$mail->send($tr); /*网络版发送邮件方法*/ /*$config = array(' auth' => ' login' , 'username' => ' mrsoft8888' , 'password' => ' mrsoft8888' ); //定义SMTP的验证参数 //实例化验证的对象 $transport = new Zend_Mail_Transport_Smtp(' smtp.sohu.com' , $config); $mail = new Zend_Mail(' GBK' ); //实例化发送邮件对象 $mail->setBodyHtml($mailbody); //发送邮件主体 $mail->setFrom($envelope, ’明日科技典型模块程序测试邮箱,修改用户注册密码!' ); $mail->addTo($email, ’获取用户新密码’); //定义邮件的接收邮箱 $mail->setSubject($subject); //定义邮件主题 $mail->send($transport); //执行发送操作 /*网络版发送邮件方法*/ if(false ==$mail->send($tr) ){ $reback = ' -1' ; }else{ $reback = '1' ; } }else{ $reback = '2' ; } }else{ $reback = $sql; } echo $reback; ?>