我們在註冊一個網站的賬戶時,通常都會收到一封含點選連結啟用的郵件,本篇文章主要介紹了PHP郵件啟用賬戶的實現代碼,有興趣的可以瞭解一下
我們在註冊一個網站的賬戶時,通常都會收到一封含點選連結啟用的郵件,而它是怎麼啟用我們的賬戶的呢,今天向大家介紹一種方法。
預備條件
我們在註冊賬戶時,一般在使用者表中會記錄下我們的id、使用者名稱、密碼、郵箱或手機號,還會有一個賬戶啟用與否的欄位。我們假設它為 activation varchar(50)
註冊時一般都會產生一個啟用碼,並且把啟用碼插入activation欄位,我們可以使用$activation_key=bin2hex(openssl_random_pseudo_bytes(16));
來產生,並且把它插入欄位。
在連結中儲存啟用資訊
既然我們點擊了郵件裡的連結後,就啟用了賬戶,那麼說明這個連結裡,必然儲存了啟用資訊。而它應該儲存哪些資訊呢,首先,必須有啟用碼,還有使用者註冊時的郵箱或者id,我們這裡用郵箱。例如下面這個連結。
複製代碼 代碼如下:
$message.="<a href="." rel="external nofollow" http://www.XXXXX.com/activate.php?email=".urlencode($email)."&key=$activation_key".">Activate</a>";
$email
使我們註冊時的郵箱,我們用urlencode()
來編碼一下,將字串用於 URL 的請求部分,$activation_key
就是我們產生的啟用碼了,我們用伺服器向這個email發送啟用郵件,而這個在郵箱用戶端裡,會顯示成一個超連結,提示你點擊,點擊後,我們就把email和key傳送到了activate.php檔案,也就是開始執行驗證並啟用賬戶了。
在activate.php中驗證資訊
我們使用URL請求向activate.php傳入使用者郵箱和啟用碼,現在只需要調取資料庫中原有的資訊進行對比,就可以驗證使用者了,所以我們第一步才將啟用碼插入使用者表中,我寫了一個activate.php的例子:
<?php$link=mysqli_connect("localhost", "root", "root", "project") or die("Database Access Denied");//串連資料庫if (!isset($_GET['email'])||!isset($_GET["key"])){ echo "<p class='alert alert-danger'>Account Activation Failed</p>"; exit;//如果郵件連結損壞,沒有傳入使用者啟用資訊,則不執行後續步驟}$email=$_GET['email'];$key=$_GET['key'];$email=mysqli_real_escape_string($link, $email);$key=mysqli_real_escape_string($link, $key);//轉義特殊字元$sql="UPDATE users SET activation='activated' WHERE (user_email='$email' AND activation='$key') LIMIT 1";$result=mysqli_query($link, $sql);//查詢email與key匹配的資料項目,並且更新activation欄位到activatedif (mysqli_affected_rows($link)==1){ echo "<p>Account Activated</p>"; echo '<a href="index.php" rel="external nofollow" type="button">Login</a>'; echo "<br/>";}else{ echo "<p>Account Activation Failed Or Already Activated</p>";}?>
現在賬戶就啟用了,使用者在登入時,先匹配一下activation是否為activated,接著再進行後續步驟
此文僅僅只涉及這個問題的解決方案,一個完整的使用者註冊、啟用、登入,還應該配置發送郵件的伺服器