Heim > Backend-Entwicklung > PHP-Tutorial > PHP implementiert die E-Mail-Verifizierung und Kontoaktivierung nach der Benutzerregistrierung

PHP implementiert die E-Mail-Verifizierung und Kontoaktivierung nach der Benutzerregistrierung

高洛峰
Freigeben: 2016-11-21 10:45:34
Original
1341 Leute haben es durchsucht

Wenn wir Mitglieder auf vielen Websites registrieren, sendet das System nach Abschluss der Registrierung automatisch eine E-Mail an das Postfach des Benutzers. Der Inhalt dieser E-Mail ist ein URL-Link, um ihn zu aktivieren die Registrierung auf der Website. Die Mitgliedschaftsfunktionen können erst nach erfolgreicher Aktivierung normal genutzt werden.

In diesem Artikel wird anhand von Beispielen erläutert, wie Sie PHP Mysql verwenden, um die Funktionen der Registrierung eines Kontos, des Sendens von Aktivierungs-E-Mails, der Überprüfung von Aktivierungskonten und der Handhabung des Ablaufs von URL-Links abzuschließen.

Geschäftsprozess

1. Der Benutzer übermittelt Registrierungsinformationen.

2. In die Datenbank schreiben. Der Kontostatus ist derzeit nicht aktiviert.

3. Verschlüsseln Sie den Benutzernamen, das Passwort oder andere identifizierende Zeichen, um einen Aktivierungsidentifikationscode zu bilden (Sie können ihn auch als Aktivierungscode bezeichnen).

4. Senden Sie den erstellten Aktivierungsidentifikationscode in eine URL an die vom Benutzer angegebene E-Mail-Adresse.

5. Der Benutzer meldet sich bei der E-Mail an und klickt zur Aktivierung auf die URL.

6. Überprüfen Sie den Aktivierungs-Identifikationscode und aktivieren Sie das Konto, falls korrekt.

Datentabelle vorbereiten

Das Feld E-Mail in der Benutzerinformationstabelle ist sehr wichtig. Es kann zum Überprüfen von Benutzern, zum Abrufen von Passwörtern und sogar für Website-Partys zum Sammeln verwendet werden Benutzerinformationen für E-Mail-Marketing. Das Folgende ist die Tabellenstruktur der Benutzerinformationstabelle 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;
Nach dem Login kopieren

HTML

Platzieren Sie ein Registrierungsformular auf der Seite, und der Benutzer kann sich registrieren Informationen, einschließlich Benutzername, Passwort und E-Mail.

<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>
Nach dem Login kopieren

Für die Benutzereingabe ist eine erforderliche Frontend-Verifizierung erforderlich. Wir empfehlen Ihnen, den Artikel auf dieser Website zu lesen: Beispiele zur Erläuterung der Anwendung des Formularverifizierungs-Plug-ins Validierung. In diesem Artikel wird der Front-End-Bestätigungscode übersprungen. Tatsächlich sollte es auf der Seite ein Eingabefeld geben, in dem der Benutzer das Passwort erneut eingeben muss.

register.php

Der Benutzer übermittelt die Registrierungsinformationen zur Verarbeitung an register.php. register.php muss zwei Hauptfunktionen erfüllen: Daten schreiben und E-Mails senden.

Zunächst sind die beiden notwendigen Dateien connect.php und smtp.class.php im mitgelieferten Download-Paket enthalten.

include_once("connect.php");//连接数据库 
include_once("smtp.class.php");//邮件发送类
Nach dem Login kopieren

Dann müssen wir die vom Benutzer übermittelten Informationen filtern und überprüfen, ob der Benutzername vorhanden ist (das Frontend kann dies auch überprüfen).

$username = stripslashes(trim($_POST[&#39;username&#39;])); 
$query = mysql_query("select id from t_user where username=&#39;$username&#39;"); 
$num = mysql_num_rows($query); 
if($num==1){ 
    echo &#39;用户名已存在,请换个其他的用户名&#39;; 
    exit; 
}
Nach dem Login kopieren

Dann verschlüsseln wir das Benutzerpasswort und erstellen den Aktivierungsidentifikationscode:

$password = md5(trim($_POST[&#39;password&#39;])); //加密密码 
$email = trim($_POST[&#39;email&#39;]); //邮箱 
$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 (&#39;$username&#39;,&#39;$password&#39;,&#39;$email&#39;,&#39;$token&#39;,&#39;$token_exptime&#39;,&#39;$regtime&#39;)"; 
 
mysql_query($sql);
Nach dem Login kopieren

Im obigen Code ist $token der konstruierte Aktivierungsidentifikationscode, der sich aus dem zusammensetzt Benutzername, Das Passwort setzt sich aus der aktuellen Uhrzeit zusammen und ist mit md5 verschlüsselt. Mit $token_exptime wird die Ablaufzeit der Aktivierungslink-URL festgelegt. Der Benutzer kann das Konto innerhalb dieses Zeitraums aktivieren. In diesem Beispiel ist die Aktivierung innerhalb von 24 Stunden gültig. Abschließend werden diese Felder in die Datentabelle t_user eingefügt.

Wenn die Daten erfolgreich eingefügt wurden, rufen Sie die E-Mail-Sendeklasse auf, um die Aktivierungsinformationen an das registrierte Postfach des Benutzers zu senden. Achten Sie darauf, den erstellten Aktivierungsidentifikationscode in eine vollständige URL als Aktivierungslink umzuwandeln, wenn der Benutzer darauf klickt . Im Folgenden finden Sie die Details zum Code:

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=&#39;http://www.helloweba.com/demo/register/active.php?verify=".$token."&#39; target= 
&#39;_blank&#39;>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 = &#39;恭喜您,注册成功!<br/>请登录到您的邮箱及时激活您的帐号!&#39;;     
    }else{ 
        $msg = $rs;     
    } 
} 
echo $msg;
Nach dem Login kopieren

Es gibt auch eine sehr benutzerfreundliche und leistungsstarke E-Mail-Versandklasse, die Sie mit allen teilen können: Verwenden Sie PHPMailer, um E-Mails mit Anhängen zu senden und HTML-Inhalte zu unterstützen kann es direkt nutzen.

active.php

Wenn nichts schief geht, erhält die E-Mail-Adresse, die Sie bei der Registrierung Ihres Kontos eingegeben haben, eine E-Mail von helloweba. Zu diesem Zeitpunkt können Sie direkt auf den Aktivierungslink klicken und ihn übergeben um zu active.php zu wechseln.

active.php empfängt die übermittelten Linkinformationen und erhält den Wert des Parameters „Verify“, bei dem es sich um den Aktivierungsidentifikationscode handelt. Fragen Sie ihn ab und vergleichen Sie ihn mit den Benutzerinformationen in der Datentabelle. Stellen Sie fest, ob er innerhalb des Gültigkeitszeitraums liegt. Setzen Sie das Statusfeld in der entsprechenden Benutzertabelle auf 1 wurde aktiviert. Damit ist die Aktivierungsfunktion abgeschlossen.

include_once("connect.php");//连接数据库 
 
$verify = stripslashes(trim($_GET[&#39;verify&#39;])); 
$nowtime = time(); 
 
$query = mysql_query("select id,token_exptime from t_user where status=&#39;0&#39; and  
`token`=&#39;$verify&#39;"); 
$row = mysql_fetch_array($query); 
if($row){ 
    if($nowtime>$row[&#39;token_exptime&#39;]){ //24hour 
        $msg = &#39;您的激活有效期已过,请登录您的帐号重新发送激活邮件.&#39;; 
    }else{ 
        mysql_query("update t_user set status=1 where id=".$row[&#39;id&#39;]); 
        if(mysql_affected_rows($link)!=1) die(0); 
        $msg = &#39;激活成功!&#39;; 
    } 
}else{ 
    $msg = &#39;error.&#39;;     
} 
echo $msg;
Nach dem Login kopieren

Nach erfolgreicher Aktivierung stellen Sie fest, dass das Token-Feld nicht mehr nützlich ist und können es löschen. Als Nächstes erklären wir Benutzern die Funktion zum Abrufen von Passwörtern und verwenden auch die E-Mail-Verifizierung. Bleiben Sie also auf dem Laufenden.

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage