1. 程式人生 > >賬號註冊郵箱啟用設計

賬號註冊郵箱啟用設計

我們在很多網站註冊會員時,註冊完成後,系統會自動向使用者的郵箱傳送一封郵件,這封郵件的內容就是一個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欄位並沒有用處了,您可以清空。接下來我們會講解使用者找回密碼的功能,也要用到郵箱驗證,敬請關注。