賬號註冊郵箱啟用設計
我們在很多網站註冊會員時,註冊完成後,系統會自動向使用者的郵箱傳送一封郵件,這封郵件的內容就是一個URL連結,使用者需要點選開啟這個連結才能啟用之前在該網站註冊的帳號。啟用成功後才能正常使用會員功能。
註冊帳號、傳送啟用郵件、驗證啟用帳號、處理URL連結過期的功能。
業務流程:
1、使用者提交註冊資訊。
2、寫入資料庫,此時帳號狀態未啟用。
3、將使用者名稱密碼或其他標識字元加密構造成啟用識別碼(你也可以叫啟用碼)。
4、將構造好的啟用識別碼組成URL傳送到使用者提交的郵箱。
5、使用者登入郵箱並點選URL,進行啟用。
6、驗證啟用識別碼,如果正確且未過期則啟用帳號。
準備資料表
使用者資訊表中欄位Email很重要,它可以用來驗證使用者、找回密碼、甚至對網站方來說可以用來收集使用者資訊進行Email營銷,以下是使用者資訊表t_user的表結構:
CREATE TABLE IF NOT EXISTS `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL COMMENT '使用者名稱',
`password` varchar(32) NOT NULL COMMENT '密碼',
`email` varchar(30) NOT NULL COMMENT '郵箱',
`token` varchar(50) NOT NULL COMMENT '帳號啟用碼',
`token_exptime` int(10 ) NOT NULL COMMENT '啟用碼有效期',
`status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '狀態,0-未啟用,1-已啟用',
`regtime` int(10) NOT NULL COMMENT '註冊時間',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
HTML
在頁面中放置一個登錄檔單,使用者可以輸入註冊資訊,包括使用者名稱、密碼和郵箱。
<form id="reg" action="register.php" method ="post">
<p>使用者名稱:<input type="text" class="input" name="username" id="user"></p>
<p>密 碼:<input type="password" class="input" name="password" id="pass"></p>
<p>E-mail:<input type="text" class="input" name="email" id="email"></p>
<p><input type="submit" class="btn" value="提交註冊"></p>
</form>
對於使用者的輸入要進行必要的前端驗證,關於表單驗證功能,建議您參考本站文章:例項講解表單驗證外掛Validation的應用,本文對前端驗證程式碼略過,另外其實頁面中還應該有個要求使用者重複輸入密碼的輸入框,一時偷懶就此略過。
register.php
使用者將註冊資訊提交到register.php進行處理。register.php需要完成寫入資料和傳送郵件兩大功能。
首先包含必要的兩個檔案,connect.php和smtp.class.php,這兩個檔案在外面提供的下載包裡有,歡迎下載。
include_once("connect.php");//連線資料庫
include_once("smtp.class.php");//郵件傳送類
//然後我們要過濾使用者提交的資訊,並驗證使用者名稱是否存在(前端也可以驗證)。
$username = stripslashes(trim($_POST['username']));
$query = mysql_query("select id from t_user where username='$username'");
$num = mysql_num_rows($query);
if($num==1){
echo '使用者名稱已存在,請換個其他的使用者名稱';
exit;
}
接著我們將使用者密碼加密,構造啟用識別碼:
$password = md5(trim($_POST['password'])); //加密密碼
$email = trim($_POST['email']); //郵箱
$regtime = time();
$token = md5($username.$password.$regtime); //建立用於啟用識別碼
$token_exptime = time()+60*60*24;//過期時間為24小時後
$sql = "insert into `t_user` (`username`,`password`,`email`,`token`,`token_exptime`,`regtime`)
values ('$username','$password','$email','$token','$token_exptime','$regtime')";
mysql_query($sql);
/*上述程式碼中,$token即構造好的啟用識別碼,它是由使用者名稱、密碼和當前時間組成並md5加密得來的。$token_exptime用於設定啟用連結URL的過期時間,使用者在這個時間段內可以啟用帳號,本例設定的是24小時內啟用有效。最後將這些欄位插入到資料表t_user中。
當資料插入成功後,呼叫郵件傳送類將啟用資訊傳送給使用者註冊的郵箱,注意將構造好的啟用識別碼組成一個完整的URL作為使用者點選時的啟用連結,以下是詳細程式碼:*/
if(mysql_insert_id()){
$smtpserver = ""; //SMTP伺服器,如:smtp.163.com
$smtpserverport = 25; //SMTP伺服器埠,一般為25
$smtpusermail = ""; //SMTP伺服器的使用者郵箱,如[email protected]
$smtpuser = ""; //SMTP伺服器的使用者帳號[email protected]
$smtppass = ""; //SMTP伺服器的使用者密碼
$smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); //例項化郵件類
$emailtype = "HTML"; //信件型別,文字:text;網頁:HTML
$smtpemailto = $email; //接收郵件方,本例為註冊使用者的Email
$smtpemailfrom = $smtpusermail; //傳送郵件方,如[email protected]
$emailsubject = "使用者帳號啟用";//郵件標題
//郵件主體內容
$emailbody = "親愛的".$username.":<br/>感謝您在我站註冊了新帳號。<br/>請點選連結啟用您的帳號。<br/>
<a href='http://www.helloweba.com/demo/register/active.php?verify=".$token."' target=
'_blank'>http://www.helloweba.com/demo/register/active.php?verify=".$token."</a><br/>
如果以上鍊接無法點選,請將它複製到你的瀏覽器位址列中進入訪問,該連結24小時內有效。";
//傳送郵件
$rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);
if($rs==1){
$msg = '恭喜您,註冊成功!<br/>請登入到您的郵箱及時啟用您的帳號!';
}else{
$msg = $rs;
}
}
echo $msg;
active.php
如果不出意外,您註冊帳號時填寫的Email將收到一封helloweba傳送的郵件,這個時候您直接點選啟用連結,交由active.php處理。
active.php接收提交的連結資訊,獲取引數verify的值,即啟用識別碼。將它與資料表中的使用者資訊進行查詢對比,如果有相應的資料集,判斷是否過期,如果在有效期內則將對應的使用者表中欄位status設定1,即已啟用,這樣就完成了啟用功能。
include_once("connect.php");//連線資料庫
$verify = stripslashes(trim($_GET['verify']));
$nowtime = time();
$query = mysql_query("select id,token_exptime from t_user where status='0' and
`token`='$verify'");
$row = mysql_fetch_array($query);
if($row){
if($nowtime>$row['token_exptime']){ //24hour
$msg = '您的啟用有效期已過,請登入您的帳號重新發送啟用郵件.';
}else{
mysql_query("update t_user set status=1 where id=".$row['id']);
if(mysql_affected_rows($link)!=1) die(0);
$msg = '啟用成功!';
}
}else{
$msg = 'error.';
}
echo $msg;
啟用成功後,發現token欄位並沒有用處了,您可以清空。接下來我們會講解使用者找回密碼的功能,也要用到郵箱驗證,敬請關注。