首頁 後端開發 php教程 (進階篇)PHP實現使用者註冊後信箱驗證,啟動帳號

(進階篇)PHP實現使用者註冊後信箱驗證,啟動帳號

Feb 07, 2017 am 09:21 AM

我們在許多網站註冊會員時,註冊完成後,系統會自動向用戶的郵箱發送一封郵件,這封郵件的內容就是一個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;
登入後複製

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服务器的用户邮箱,如xxx@163.com 
    $smtpuser = ""; //SMTP服务器的用户帐号xxx@163.com 
    $smtppass = ""; //SMTP服务器的用户密码 
    $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); //实例化邮件类 
    $emailtype = "HTML"; //信件类型,文本:text;网页:HTML 
    $smtpemailto = $email; //接收邮件方,本例为注册用户的Email 
    $smtpemailfrom = $smtpusermail; //发送邮件方,如xxx@163.com 
    $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字段并没有用处了,您可以清空。接下来我们会讲解用户找回密码的功能,也要用到邮箱验证,敬请关注。

以上就是(进阶篇)PHP实现用户注册后邮箱验证,激活帐号的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

DeepSeek官網入口及最新優惠活動一覽 DeepSeek官網入口及最新優惠活動一覽 Feb 19, 2025 pm 05:15 PM

DeepSeek官網入口及最新優惠活動一覽

CakePHP 建立驗證器 CakePHP 建立驗證器 Sep 10, 2024 pm 05:26 PM

CakePHP 建立驗證器

See all articles