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

tomodifyDataNaphPsession,startTheSessionWithSession_start(),然後使用$ _sessionToset,修改,orremovevariables.1)startThesession.2)setthesession.2)使用$ _session.3)setormodifysessessvariables.3)emovervariableswithunset()

在PHP會話中可以存儲數組。 1.啟動會話,使用session_start()。 2.創建數組並存儲在$_SESSION中。 3.通過$_SESSION檢索數組。 4.優化會話數據以提升性能。

PHP會話垃圾回收通過概率機制觸發,清理過期會話數據。 1)配置文件中設置觸發概率和會話生命週期;2)可使用cron任務優化高負載應用;3)需平衡垃圾回收頻率與性能,避免數據丟失。

PHP中追踪用戶會話活動通過會話管理實現。 1)使用session_start()啟動會話。 2)通過$_SESSION數組存儲和訪問數據。 3)調用session_destroy()結束會話。會話追踪用於用戶行為分析、安全監控和性能優化。

利用數據庫存儲PHP會話數據可以提高性能和可擴展性。 1)配置MySQL存儲會話數據:在php.ini或PHP代碼中設置會話處理器。 2)實現自定義會話處理器:定義open、close、read、write等函數與數據庫交互。 3)優化和最佳實踐:使用索引、緩存、數據壓縮和分佈式存儲來提升性能。

phpsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIdStoredInAcookie.here'showtomanageThemeffectionaly:1)startAsessionWithSessionWwithSession_start()和stordoredAtain $ _session.2)

在PHP中,遍歷會話數據可以通過以下步驟實現:1.使用session_start()啟動會話。 2.通過foreach循環遍歷$_SESSION數組中的所有鍵值對。 3.處理複雜數據結構時,使用is_array()或is_object()函數,並用print_r()輸出詳細信息。 4.優化遍歷時,可採用分頁處理,避免一次性處理大量數據。這將幫助你在實際項目中更有效地管理和使用PHP會話數據。

會話通過服務器端的狀態管理機制實現用戶認證。 1)會話創建並生成唯一ID,2)ID通過cookies傳遞,3)服務器存儲並通過ID訪問會話數據,4)實現用戶認證和狀態管理,提升應用安全性和用戶體驗。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版
好用的JavaScript開發工具