一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

php語(yǔ)言

如何用PHP實(shí)現找回密碼

時(shí)間:2025-02-03 04:28:27 php語(yǔ)言 我要投稿
  • 相關(guān)推薦

如何用PHP實(shí)現找回密碼

  通常所說(shuō)的密碼找回功能不是真的能把忘記的密碼找回,因為我們的密碼是加密保存的,一般開(kāi)發(fā)者會(huì )在驗證用戶(hù)信息后通過(guò)程序生成一個(gè)新密碼或者生成一個(gè)特定的鏈接并發(fā)送郵件到用戶(hù)郵箱,用戶(hù)從郵箱鏈接到網(wǎng)站的重置密碼模塊重新設置新密碼。下面是小編為大家帶來(lái)的關(guān)于如何用PHP實(shí)現找回密碼的知識,歡迎閱讀。

  如何用PHP實(shí)現找回密碼

  當然現在有的網(wǎng)站也有手機短信的方式找回密碼,原理就是通過(guò)發(fā)送驗證碼來(lái)驗明正身,和發(fā)送郵件驗證一樣,最終還是要通過(guò)重置密碼來(lái)完成找回密碼的流程。

  本文將使用PHP+Mysql+jQuery來(lái)實(shí)現一個(gè)密碼找回的功能,一般步驟是:

  1.表單輸入注冊時(shí)的郵箱;

  2.驗證用戶(hù)郵箱是否正確,如果用戶(hù)郵箱不存在網(wǎng)站的用戶(hù)表中,則提示用戶(hù)郵箱未注冊;

  3.發(fā)送郵件,如果用戶(hù)郵箱確實(shí)存在用戶(hù)表中,則組合用于驗證用戶(hù)信息的字符串,并構造URL發(fā)送到用戶(hù)郵箱中;

  4.用戶(hù)登錄郵箱收取郵件,點(diǎn)擊URL鏈接到網(wǎng)站驗證程序;

  5.網(wǎng)站程序通過(guò)用戶(hù)請求的字符串查詢(xún)本地用戶(hù)表,比對用戶(hù)信息是否正確;

  6.如果正確則轉到重置密碼頁(yè)面重新設置新密碼,反之則提示用戶(hù)驗證無(wú)效。

  我們在找回密碼的頁(yè)面上放置一個(gè)要求用戶(hù)輸入注冊時(shí)所用的郵箱,然后提交前臺js來(lái)處理交互。

  <p><strong>輸入您注冊的電子郵箱,找回密碼:</strong></p>

  <p><input type="text" class="input" name="email" id="email"><span id="chkmsg"></span></p>

  <p><input type="button" class="btn" id="sub_btn" value="提 交"></p>

  當用戶(hù)輸入完郵箱并點(diǎn)擊提交后,jQuery先驗證郵箱格式是否正確,如果正確則通過(guò)向后臺sendmail.php發(fā)送Ajax請求,sendmail.php負責驗證郵箱是否存在和發(fā)送郵件,并會(huì )返回相應的處理結果給前臺頁(yè)面,請看jQuery代碼:

  $(function(){

  $("#sub_btn").click(function(){

  var email = $("#email").val();

  var preg = /^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/; //匹配Email

  if(email=='' || !preg.test(email)){

  $("#chkmsg").html("請填寫(xiě)正確的郵箱!");

  }else{

  $("#sub_btn").attr("disabled","disabled").val('提交中..').css("cursor","default");

  $.post("sendmail.php",{mail:email},function(msg){

  if(msg=="noreg"){

  $("#chkmsg").html("該郵箱尚未注冊!");

  $("#sub_btn").removeAttr("disabled").val('提 交').css("cursor","pointer");

  }else{

  $(".demo").html("<h3>"+msg+"</h3>");

  }

  });

  }

  });

  })

  以上使用的jQuery代碼很方便簡(jiǎn)潔的完成了前端交互操作,如果您有一定的jQuery基礎,那上面的代碼一目了然,不多解釋。

  當然別忘了在頁(yè)面中加載jQuery庫文件,有的同學(xué)經(jīng)常問(wèn)我說(shuō)從helloweba.com下載了demo怎么用不了,那80%是jquery或者其他文件加載路徑錯了導致沒(méi)加載必要的文件。

  sendmail.php需要驗證Email是否存在系統用戶(hù)表中,如果有,則讀取用戶(hù)信息,將用戶(hù)id、用戶(hù)名和密碼驚醒md5加密生成一個(gè)特別的字符串作為找回密碼的驗證碼,然后構造URL。同時(shí)我們?yōu)榱丝刂芔RL鏈接的時(shí)效性,將記錄用戶(hù)提交找回密碼動(dòng)作的操作時(shí)間,最后調用郵件發(fā)送類(lèi)發(fā)送郵件到用戶(hù)郵箱:

  include_once("connect.php");//連接數據庫

  $email = stripslashes(trim($_POST['mail']));

  $sql = "select id,username,password from `t_user` where `email`='$email'";

  $query = mysql_query($sql);

  $num = mysql_num_rows($query);

  if($num==0){//該郵箱尚未注冊!

  echo 'noreg';

  exit;

  }else{

  $row = mysql_fetch_array($query);

  $getpasstime = time();

  $uid = $row['id'];

  $token = md5($uid.$row['username'].$row['password']);//組合驗證碼

  $url = "http://www.helloweba.com/demo/resetpass/reset.php?email=".$email."

  &token=".$token;//構造URL

  $time = date('Y-m-d H:i');

  $result = sendmail($time,$email,$url);

  if($result==1){//郵件發(fā)送成功

  $msg = '系統已向您的郵箱發(fā)送了一封郵件<br/>請登錄到您的郵箱及時(shí)重置您的密碼!';

  //更新數據發(fā)送時(shí)間

  mysql_query("`t_user` set `getpasstime`='$getpasstime' where id='$uid '");

  }else{

  $msg = $result;

  }

  echo $msg;

  }

  //發(fā)送郵件

  function sendmail($time,$email,$url){

  include_once("smtp.class.php");

  $smtpserver = ""; //SMTP服務(wù)器,如smtp.163.com

  $smtpserverport = 25; //SMTP服務(wù)器端口

  $smtpusermail = ""; //SMTP服務(wù)器的用戶(hù)郵箱

  $smtpuser = ""; //SMTP服務(wù)器的用戶(hù)帳號

  $smtppass = ""; //SMTP服務(wù)器的'用戶(hù)密碼

  $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass);

  //這里面的一個(gè)true是表示使用身份驗證,否則不使用身份驗證.

  $emailtype = "HTML"; //信件類(lèi)型,文本:text;網(wǎng)頁(yè):HTML

  $smtpemailto = $email;

  $smtpemailfrom = $smtpusermail;

  $emailsubject = "Helloweba.com - 找回密碼";

  $emailbody = "親愛(ài)的".$email.":<br/>您在".$time."提交了找回密碼請求。請點(diǎn)擊下面的鏈接重置密碼

 。ò粹o24小時(shí)內有效)。<br/><a href='".$url."'target='_blank'>".$url."</a>";

  $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);

  return $rs;

  }

  好了,這個(gè)時(shí)候你的郵箱將會(huì )收到一封來(lái)自helloweba的密碼找回郵件,郵件內容中有一個(gè)URL鏈接,點(diǎn)擊該鏈接到helloweba.com的reset.php來(lái)驗證郵箱。

  include_once("connect.php");//連接數據庫

  $token = stripslashes(trim($_GET['token']));

  $email = stripslashes(trim($_GET['email']));

  $sql = "select * from `t_user` where email='$email'";

  $query = mysql_query($sql);

  $row = mysql_fetch_array($query);

  if($row){

  $mt = md5($row['id'].$row['username'].$row['password']);

  if($mt==$token){

  if(time()-$row['getpasstime']>24*60*60){

  $msg = '該鏈接已過(guò)期!';

  }else{

  //重置密碼...

  $msg = '請重新設置密碼,顯示重置密碼表單,<br/>這里只是演示,略過(guò)。';

  }

  }else{

  $msg =  '無(wú)效的鏈接';

  }

  }else{

  $msg =  '錯誤的鏈接!';

  }

  echo $msg;

  reset.php首先接受參數email和token,然后根據email查詢(xún)數據表t_user中是否存在該Email,如果存在則獲取該用戶(hù)的信息,并且和sendmail.php中的token組合方式一樣構建token值,然后與url傳過(guò)來(lái)的token進(jìn)行對比,如果當前時(shí)間與發(fā)送郵件時(shí)的時(shí)間相差超過(guò)24小時(shí)的,則提示“該鏈接已過(guò)期!”,反之,則說(shuō)明鏈接有效,并且調轉到重置密碼頁(yè)面,最后就是用戶(hù)自己設置新密碼了。

  小結:通過(guò)注冊郵箱驗證與本文郵件找回密碼,我們知道發(fā)送郵件在網(wǎng)站開(kāi)發(fā)中的應用以及它的重要性,當然,現在也流行短信驗證應用,這個(gè)需要相關(guān)的短信接口對接就可以了。


【如何用PHP實(shí)現找回密碼】相關(guān)文章:

PHP怎么處理密碼08-28

PHP處理密碼的方式10-10

實(shí)現PHP實(shí)現限制IP訪(fǎng)問(wèn)11-11

php實(shí)現無(wú)限級分類(lèi)實(shí)現代碼07-03

php頁(yè)面緩存實(shí)現方法07-20

PHP中多態(tài)如何實(shí)現09-04

PHP實(shí)現多線(xiàn)程的方法08-02

PHP列表頁(yè)實(shí)現的方法05-24

PHP頁(yè)面跳轉實(shí)現技巧09-19

一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看