溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php怎樣實現(xiàn)忘記密碼找回密碼的功能

發(fā)布時間:2020-11-24 10:59:30 來源:億速云 閱讀:996 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)php怎樣實現(xiàn)忘記密碼找回密碼的功能,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

php實現(xiàn)忘記密碼的功能方法:首先通過表單輸入注冊時的郵箱;然后驗證用戶郵箱是否正確;接著驗證用戶信息的字符串,并構(gòu)造URL發(fā)送到用戶郵箱中;最后實現(xiàn)用戶登錄郵箱收取郵件,并進(jìn)入重置密碼頁面重新設(shè)置新密碼即可。

PHP+Mysql+jQuery實現(xiàn)一個密碼找回的功能

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

本文將使用PHP+Mysql+jQuery來實現(xiàn)一個密碼找回的功能,一般步驟是:

1.表單輸入注冊時的郵箱;

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

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

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

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

6.如果正確則轉(zhuǎn)到重置密碼頁面重新設(shè)置新密碼,反之則提示用戶驗證無效。

HTML

我們在找回密碼的頁面上放置一個要求用戶輸入注冊時所用的郵箱,然后提交前臺js來處理交互。

<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>

jQuery

當(dāng)用戶輸入完郵箱并點擊提交后,jQuery先驗證郵箱格式是否正確,如果正確則通過向后臺sendmail.php發(fā)送Ajax請求,sendmail.php負(fù)責(zé)驗證郵箱是否存在和發(fā)送郵件,并會返回相應(yīng)的處理結(jié)果給前臺頁面,請看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("請?zhí)顚懻_的郵箱!");
}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("<h4>"+msg+"</h4>");
}
});
}
});
})

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

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

PHP

sendmail.php需要驗證Email是否存在系統(tǒng)用戶表中,如果有,則讀取用戶信息,將用戶id、用戶名和密碼驚醒md5加密生成一個特別的字符串作為找回密碼的驗證碼,然后構(gòu)造URL。同時我們?yōu)榱丝刂芔RL鏈接的時效性,將記錄用戶提交找回密碼動作的操作時間,最后調(diào)用郵件發(fā)送類發(fā)送郵件到用戶郵箱,發(fā)送郵件類smtp.class.php已經(jīng)打包好,請下載。

include_once("connect.php");//連接數(shù)據(jù)庫
$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.net/demo/resetpass/reset.php?email=".$email."
&token=".$token;//構(gòu)造URL
$time = date('Y-m-d H:i');
$result = sendmail($time,$email,$url);
if($result==1){//郵件發(fā)送成功
$msg = '系統(tǒng)已向您的郵箱發(fā)送了一封郵件<br/>請登錄到您的郵箱及時重置您的密碼!';
//更新數(shù)據(jù)發(fā)送時間
mysql_query("update `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ù)器的用戶郵箱
    $smtpuser = ""; //SMTP服務(wù)器的用戶帳號
    $smtppass = ""; //SMTP服務(wù)器的用戶密碼
    $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); 
    //這里面的一個true是表示使用身份驗證,否則不使用身份驗證.
    $emailtype = "HTML"; //信件類型,文本:text;網(wǎng)頁:HTML
    $smtpemailto = $email;
    $smtpemailfrom = $smtpusermail;
    $emailsubject = "Helloweba.com - 找回密碼";
    $emailbody = "親愛的".$email.":<br/>您在".$time."提交了找回密碼請求。請點擊下面的鏈接重置密碼
(按鈕24小時內(nèi)有效)。<br/><a href='".$url."'target='_blank'>".$url."</a>";
    $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);
return $rs;
}

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

include_once("connect.php");//連接數(shù)據(jù)庫
$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 = '該鏈接已過期!';
}else{
//重置密碼...
$msg = '請重新設(shè)置密碼,顯示重置密碼表單,<br/>這里只是演示,略過。';
}
}else{
$msg =  '無效的鏈接';
}
}else{
$msg =  '錯誤的鏈接!';
}
echo $msg;

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

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

最后,附上數(shù)據(jù)表t_user結(jié)構(gòu):

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(30) NOT NULL,
  `password` varchar(32) NOT NULL,
  `email` varchar(50) NOT NULL,
  `getpasstime` int(10) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

關(guān)于php怎樣實現(xiàn)忘記密碼找回密碼的功能就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI