筆者前段接了一個項目,其中包含了一個使用者註冊系統,用到了密碼找回功能,簡單整理一下,寫點心得。
首先,我們假定你已經有了一個使用者註冊系統。其中使用者表可能如下:
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代碼:
/**
* 我們假設你已經在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);
http://www.bkjia.com/PHPjc/631885.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/631885.htmlTechArticle筆者前段接了一個項目,其中包含了一個使用者註冊系統,用到了密碼找回功能,簡單整理一下,寫點心得。 首先,我們假定你已經有了一個...