通過PHP實現使用者註冊後郵箱驗證啟用
我們在很多網站註冊會員時,註冊完成後,系統會自動向使用者的郵箱傳送一封郵件,這封郵件的內容就是一個URL連結,使用者需要點選開啟這個連結才能啟用之前在該網站註冊的帳號。啟用成功後才能正常使用會員功能。
本文將結合例項,講解如何使用PHP+Mysql完成註冊帳號、傳送啟用郵件、驗證啟用帳號、處理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;
在頁面中放置一個登錄檔單,使用者可以輸入註冊資訊,包括使用者名稱、密碼和郵箱。
<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;
還有一個相當好用且強大的郵件傳送類分享個大家:使用PHPMailer傳送帶附件並支援HTML內容的郵件,直接可以用哦。
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欄位並沒有用處了,您可以清空。接下來我們會講解使用者找回密碼的功能,也要用到郵箱驗證,敬請關注。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。