通常所說(shuō)的密碼找回功能不是真的能把忘記的密碼找回,因?yàn)槲覀兊拿艽a是加密保存的,一般開發(fā)者會(huì)在驗(yàn)證用戶信息后通過(guò)程序生成一個(gè)新密碼或者生成一個(gè)特定的鏈接并發(fā)送郵件到用戶郵箱,用戶從郵箱鏈接到網(wǎng)站的重置密碼模塊重新設(shè)置新密碼。
當(dāng)然現(xiàn)在有的網(wǎng)站也有手機(jī)短信的方式找回密碼,原理就是通過(guò)發(fā)送驗(yàn)證碼來(lái)驗(yàn)明正身,和發(fā)送郵件驗(yàn)證一樣,最終還是要通過(guò)重置密碼來(lái)完成找回密碼的流程。
本文將使用PHP+Mysql+jQuery來(lái)實(shí)現(xiàn)一個(gè)密碼找回的功能,一般步驟是:
1.表單輸入注冊(cè)時(shí)的郵箱;
2.驗(yàn)證用戶郵箱是否正確,如果用戶郵箱不存在網(wǎng)站的用戶表中,則提示用戶郵箱未注冊(cè);
3.發(fā)送郵件,如果用戶郵箱確實(shí)存在用戶表中,則組合用于驗(yàn)證用戶信息的字符串,并構(gòu)造URL發(fā)送到用戶郵箱中;
4.用戶登錄郵箱收取郵件,點(diǎn)擊URL鏈接到網(wǎng)站驗(yàn)證程序;
5.網(wǎng)站程序通過(guò)用戶請(qǐng)求的字符串查詢本地用戶表,比對(duì)用戶信息是否正確;
6.如果正確則轉(zhuǎn)到重置密碼頁(yè)面重新設(shè)置新密碼,反之則提示用戶驗(yàn)證無(wú)效。
HTML
我們?cè)谡一孛艽a的頁(yè)面上放置一個(gè)要求用戶輸入注冊(cè)時(shí)所用的郵箱,然后提交前臺(tái)js來(lái)處理交互。
jquery
當(dāng)用戶輸入完郵箱并點(diǎn)擊提交后,jQuery先驗(yàn)證郵箱格式是否正確,如果正確則通過(guò)向后臺(tái)sendmail.php發(fā)送Ajax請(qǐng)求,sendmail.php負(fù)責(zé)驗(yàn)證郵箱是否存在和發(fā)送郵件,并會(huì)返回相應(yīng)的處理結(jié)果給前臺(tái)頁(yè)面,請(qǐng)看jQuery代碼:
以上使用的jQuery代碼很方便簡(jiǎn)潔的完成了前端交互操作,如果您有一定的jQuery基礎(chǔ),那上面的代碼一目了然,不多解釋。
PHP
sendmail.php需要驗(yàn)證Email是否存在系統(tǒng)用戶表中,如果有,則讀取用戶信息,將用戶id、用戶名和密碼驚醒md5加密生成一個(gè)特別的字符串作為找回密碼的驗(yàn)證碼,然后構(gòu)造URL。同時(shí)我們?yōu)榱丝刂芔RL鏈接的時(shí)效性,將記錄用戶提交找回密碼動(dòng)作的操作時(shí)間,最后調(diào)用郵件發(fā)送類發(fā)送郵件到用戶郵箱,發(fā)送郵件類smtp.class.php已經(jīng)打包好,請(qǐng)下載。
好了,這個(gè)時(shí)候你的郵箱將會(huì)收到一封來(lái)自helloweba的密碼找回郵件,郵件內(nèi)容中有一個(gè)URL鏈接,點(diǎn)擊該鏈接到helloweba.net的reset.php來(lái)驗(yàn)證郵箱。
reset.php首先接受參數(shù)email和token,然后根據(jù)email查詢數(shù)據(jù)表t_user中是否存在該Email,如果存在則獲取該用戶的信息,并且和sendmail.php中的token組合方式一樣構(gòu)建token值,然后與url傳過(guò)來(lái)的token進(jìn)行對(duì)比,如果當(dāng)前時(shí)間與發(fā)送郵件時(shí)的時(shí)間相差超過(guò)24小時(shí)的,則提示“該鏈接已過(guò)期!”,反之,則說(shuō)明鏈接有效,并且調(diào)轉(zhuǎn)到重置密碼頁(yè)面,最后就是用戶自己設(shè)置新密碼了。
小結(jié):通過(guò)注冊(cè)郵箱驗(yàn)證與本文郵件找回密碼,我們知道發(fā)送郵件在網(wǎng)站開發(fā)中的應(yīng)用以及它的重要性,當(dāng)然,現(xiàn)在也流行短信驗(yàn)證應(yīng)用,這個(gè)需要相關(guān)的短信接口對(duì)接就可以了。
最后,附上數(shù)據(jù)表t_user結(jié)構(gòu):
南昌雅騰教育是一家專注南昌php培訓(xùn)、web前端開發(fā)技術(shù)的培訓(xùn)單位,采用小班現(xiàn)場(chǎng)授課+手把手帶學(xué)徒+理論與企業(yè)項(xiàng)目實(shí)戰(zhàn)結(jié)合的培養(yǎng)方式,幫助零基礎(chǔ)、想轉(zhuǎn)行進(jìn)入IT技術(shù)行業(yè)的朋友,傳授一技之長(zhǎng),助力高薪就業(yè)。