PHP用戶注冊郵箱驗證激活帳號

轉載鏈接:http://www.helloweba.com/view-blog-228.html

本文將結合實例,講解如何使用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字段并沒有用處了,您可以清空。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276496.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276496.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276496.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

知乎問答:一年內的前端看不懂前端框架源碼怎么辦?

知乎問答&#xff1a;一年內的前端看不懂前端框架源碼怎么辦&#xff1f;以下是我的回答&#xff0c;閱讀量 1000。現在轉載到微信公眾號中。鏈接&#xff1a;https://www.zhihu.com/question/350289336/answer/910970733其他回答的已經很好了。剛好最近在寫學習源碼整體架構系…

幫自己發個求職簡歷

幫自己發個求職簡歷 發個求職信息。本人擅長Web開發&#xff0c;尤其擅長Flex&#xff0c;愿從事Web開發&#xff0c;最好是Web前端開發&#xff0c;下面是我的詳細個人簡歷&#xff1a; 個人信息&#xff1a; 姓名&#xff1a;伍國耀 年齡&#xff1a;23 性別&#xff1a;男 專…

python函數 global_**Python的函數參數傳遞 和 global

函數的參數到底是傳遞的一份復制的值&#xff0c;還是對內存的引用&#xff1f;我們看下面一段代碼&#xff1a;a []def fun(x):x.append(1)fun(a)print(a)想想一下&#xff1a;如果傳遞的是一份復制的值&#xff0c;那么列表a應該是不會變化的&#xff0c;還是空列表&#xf…

冷啟動問題:如何構建你的機器學習組合?

作為即將告別大學的機器學習畢業狗的你&#xff0c;會不會有種迷茫的感覺&#xff1f;你知道 HR 最看重的是什么嗎&#xff1f;在求職季到來之前&#xff0c;畢業狗要怎么做&#xff0c;才能受到 HR 的青睞、拿到心儀的 Offer 呢&#xff1f;負責幫助應屆生找到機器學習工作的 …

JavaScript 對象所有API解析【2020版】

寫于 2017年08月20日&#xff0c;雖然是2017年寫的文章&#xff0c;但現在即將2020年依舊不過時&#xff0c;現在補充了2019年新增的ES10 Object.fromEntries()。發到公眾號申明原創。若川順便在此提前祝大家&#xff1a;2020年更上一層樓。近日發現有挺多人對對象基礎API不熟悉…

javascript操作符之new 也瘋狂 (2)

JavaScript本是一種基于原形的&#xff08;prototypal&#xff09;語言&#xff0c;但它的“new”操作符看起來有點像經典語言。這迷惑了廣大程序員們&#xff0c;并導致了很多使用上的問題。 在JavaScript中&#xff0c;不要用到new Object()這種操作&#xff0c;該用{ }來代替…

python中if語句缺省else_9_【Python學習分享文章】_if(條件語句)

【Python學習分享文章】_if(條件語句)_logicalJudgement介紹及基本操作綜述計算機的“條件語句”和生活中的“條件成立”是不一樣的。一個生活中的例子如果被計算機執行則是如下段子&#xff1a;老婆讓程序員老公去買蘋果&#xff0c;說&#xff1a;“去水果店買5個蘋果&#x…

PHP生成各種驗證碼和Ajax驗證

轉載鏈接&#xff1a;http://www.helloweba.com/view-blog-191.html 驗證碼在WEB應用中非常重要&#xff0c;通常用來防止用戶惡意提交表單&#xff0c;如惡意注冊和登錄、論壇惡意灌水等。本文將通過實例講解使用PHP生成各種常見的驗證碼包括數字驗證碼、數字字母驗證碼、中文…

若川的2019年度總結,波瀾不驚

從2014年開始寫年度總結至今已經六個年頭了。正如孔子所說&#xff1a;逝者如斯夫&#xff0c;不舍晝夜。2019年的年度總結寫得比較晚&#xff0c;都快農歷新年了&#xff0c;此刻在家里繼續寫完這篇文章。往年基本是元旦之后幾天就寫完了。我的年度總結盡量寫得非技術人員也能…

如何正確選擇倉儲物流供應商?

如何正確選擇倉儲物流供應商&#xff1f; 以前有做電商的朋友向我咨詢過怎么去選擇優質的倉儲物流供應商&#xff1f;有哪些能做作為關鍵問題進行參考。作為一個優秀的合作伙伴是可以為客戶提供超乎預期的服務的&#xff0c;上海維佳供應鏈服務專業提供物流外包解決倉儲物流供應…

在虛機上安裝WIN2003

Moss2-turn on-WM;SJY;SJYM;666666備注&#xff1a;計算機名在網絡上必須是唯一的。姓名&#xff1a;WP; 單位&#xff1a;SJY; 計算機名稱&#xff1a;SJYP; 密碼&#xff1a;666666server 2003 R2版 MDGJK-PF6YQ-PD8DJ-RFQVM-7WKWG在“網絡設置”頁面上&#xff0c;單擊“典型…

python字典獲取關聯值_【Python實戰12】使用字典關聯數據

現在我的手里有了新的一組數據&#xff0c;數據內容如下&#xff1a;james.txt&#xff1a;James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16julie.txt&#xff1a;Julie Jones,2002-8-17,2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21,3.01…

Sending HTML content in an email using PHP

轉載鏈接&#xff1a;http://code.web-max.ca/misc_htmlemail.php 發送一個HTML格式的電子郵件&#xff0c;主要在郵件的頭信息中定義郵件正文的類型&#xff1a; Content-Type:text/html;charset"utf-8"。 示例&#xff1a; <?php// Example $HTML …

Realtime Ray Tracing RenderMan Point Cloud

這里演示的是演示的是光線與包圍盒測試。在裝備Winfast 8800GT 512M的臺式機上可以進行每秒4.6億次點到射線的距離計算計算&#xff0c;用于判斷點是否真正的與射線相交。外部數據的填充與準備延遲依舊是GPGPU應用的一個巨大門檻。白色是命中的包圍盒&#xff0c;綠色的就是射線…

SharePoint文檔上傳管理

前臺代碼: <% Control Language"C#" AutoEventWireup"true" CodeBehind"FileUpload.ascx.cs" Inherits"UploadFile.FileUpload" %><table><tr><td style"width:138px; height: 24px;">請選擇列表:…

如何制定有價值的目標

寫于2017年07月09日23:29現在修改發布到公眾號聲明原創公司會制定一系列目標&#xff0c;個人也可以制定一些目標&#xff0c;有利于自我學習成長。那么看我這篇文章可以告訴你如何制定有價值的目標。會制定有價值的目標&#xff0c;絕對超越很多人。SMART原則王健林之前說定個…

清除dns緩存命令行_怎么防止移動dns劫持,防止移動dns劫持要先了解什么是dns劫持...

本人以網絡技術出身&#xff0c;近兩年接觸CDN網絡&#xff0c;處理了一些CDN方面的網絡問題&#xff0c;大多數以運營商丟包&#xff0c;延遲抖動為主&#xff0c;也處理一些硬件故障&#xff0c;比如機械硬盤的讀寫io測試&#xff0c;內存條兼容性測試&#xff0c;服務器IPMI…

php 修改上傳文件大小 (max_execution_time post_max_size)

轉載鏈接&#xff1a;http://hi.baidu.com/ttl289/item/683c8223a54c6d0f76272cd7 有些朋友要通過自己的網站后臺&#xff0c;包括論壇&#xff0c;來上傳一些文件&#xff0c;php一般為2m&#xff0c;或8m&#xff08;以下我們按默認為2m&#xff09;&#xff0c;接下來就是來…

移動硬盤格式化(pc和mac共用)-菜鳥級解決方案[轉]

用pc的時候買了一個320G的移動硬盤&#xff0c;從來沒考慮過什么格式化的問題&#xff0c;插上就用了。 后來接觸mac才發現pc和mac在移動存儲設備的格式化上還是有不少沖突的。如果你的移動硬盤mac上不能修改&#xff0c;或者pc上找不到&#xff0c;那就盡情得批判萬惡的資本主…

【php】php的ssh2擴展的安裝

ssh2(secure shell2)&#xff0c;對于遠端主機提供高安全性的資料傳輸工作。安裝&#xff1a;1、首先要裝OpenSSL。 2、要安裝 libssh2../configure && make all install3、再然后&#xff0c;安裝PECL/ssh2可以使用 pear install ssh2安裝&#xff08;有的說是 pear i…