php語言

當前位置 /首頁/計算機/php語言/列表

PHP如何實現註冊後郵箱驗證和帳號啟用

我們在很多網站註冊會員時,註冊完成後,系統會自動向使用者的郵箱傳送一封郵件,這封郵件的內容就是一個URL連結,使用者需要點選開啟這個連結才能啟用之前在該網站註冊的帳號。啟用成功後才能正常使用會員功能。下面是小編為大家帶來的關於PHP如何實現註冊後郵箱驗證和帳號啟用的知識,歡迎閱讀。

PHP如何實現註冊後郵箱驗證和帳號啟用
  PHP如何實現註冊後郵箱驗證和帳號啟用

業務流程

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` var30) NOT NULL COMMENT '使用者名稱',

`password` var32) NOT NULL COMMENT '密碼',

`email` var30) NOT NULL COMMENT '郵箱',

`token` var50) 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="" 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的應用,本文對前端驗證程式碼略過,另外其實頁面中還應該有個要求使用者重複輸入密碼的輸入框,一時偷懶就此略過。

 

使用者將註冊資訊提交到進行處理。需要完成寫入資料和傳送郵件兩大功能。

首先包含必要的兩個檔案,和,這兩個檔案在外面提供的下載包裡有,歡迎下載。

include_once("");//連線資料庫

include_once("");//郵件傳送類

然後我們要過濾使用者提交的資訊,並驗證使用者名稱是否存在(前端也可以驗證)。

$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 = " 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__id()){

$smtpserver = ""; //SMTP伺服器,如:

$smtpserverport = 25; //SMTP伺服器埠,一般為25

$smtpusermail = ""; //SMTP伺服器的使用者郵箱,如

$smtpuser = ""; //SMTP伺服器的使用者帳號[email protected]

$smtppass = ""; //SMTP伺服器的使用者密碼

$smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); //例項化郵件類

$emailtype = "HTML"; //信件型別,文字:text;網頁:HTML

$smtpemailto = $email; //接收郵件方,本例為註冊使用者的`Email

$smtpemailfrom = $smtpusermail; //傳送郵件方,如

$emailsubject = "使用者帳號啟用";//郵件標題

//郵件主體內容

$emailbody = "親愛的".$username.":<br/>感謝您在我站註冊了新帳號。<br/>請點選連結啟用您的帳號。<br/>

<a href='$token."' target=

'_blank'>$token."</a><br/>

如果以上鍊接無法點選,請將它複製到你的瀏覽器位址列中進入訪問,該連結24小時內有效。";

//傳送郵件

$rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);

if($rs==1){

$msg = '恭喜您,註冊成功!<br/>請登入到您的郵箱及時啟用您的帳號!';

}else{

$msg = $rs;

}

}

echo $msg;

還有一個相當好用且強大的郵件傳送類分享個大家:使用PHPMailer傳送帶附件並支援HTML內容的郵件,直接可以用哦。

如果不出意外,您註冊帳號時填寫的Email將收到一封helloweba傳送的郵件,這個時候您直接點選啟用連結,交由處理。

接收提交的連結資訊,獲取引數verify的值,即啟用識別碼。將它與資料表中的使用者資訊進行查詢對比,如果有相應的資料集,判斷是否過期,如果在有效期內則將對應的使用者表中欄位status設定1,即已啟用,這樣就完成了啟用功能。

include_once("");//連線資料庫

$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("t_user set status=1 where id=".$row['id']);

if(mysql_affected_rows($link)!=1) die(0);

$msg = '啟用成功!';

}

}else{

$msg = 'error.';

}

echo $msg;

啟用成功後,發現token欄位並沒有用處了,您可以清空。

TAG標籤:帳號 啟用 驗證 PHP 郵箱 #