Heim  >  Artikel  >  Backend-Entwicklung  >  (Fortgeschritten) PHP implementiert die E-Mail-Verifizierung und Kontoaktivierung nach der Benutzerregistrierung

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

黄舟
黄舟Original
2017-02-07 09:21:231809Durchsuche

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 PHP+Mysql verwendet wird, um die Funktionen zum Registrieren eines Kontos, Senden von Aktivierungs-E-Mails, Überprüfen von Aktivierungskonten und Behandeln 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;

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>

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. Außerdem 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");//邮件发送类

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; 
}

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);

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 . Das Folgende ist der Detailcode:

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;

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 verwenden.

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接收提交的链接信息,获取参数verify的值,即激活识别码。将它与数据表中的用户信息进行查询对比,如果有相应的数据集,判断是否过期,如果在有效期内则将对应的用户表中字段status设置1,即已激活,这样就完成了激活功能。

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;

激活成功后,发现token字段并没有用处了,您可以清空。接下来我们会讲解用户找回密码的功能,也要用到邮箱验证,敬请关注。

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


Stellungnahme:
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