Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung, wie der Aktivierungscode für die Benutzer-E-Mail-Registrierung in PHP implementiert wird

Ausführliche Erklärung, wie der Aktivierungscode für die Benutzer-E-Mail-Registrierung in PHP implementiert wird

伊谢尔伦
伊谢尔伦Original
2017-07-15 13:23:045864Durchsuche

Wenn sich Benutzer auf der Website anmelden und registrieren, müssen sie normalerweise ihre eigene E-Mail-Adresse verwenden. Die E-Mail-Adresse erhält die E-Mail von der Website, um das Konto zu aktivieren, und kann dann normal verwendet werden. In diesem Artikel wird anhand von Beispielen erläutert, wie Sie mit PHP+Mysql die Funktionen zum Registrieren eines Kontos, Senden von Aktivierungs-E-Mails, Überprüfen von Aktivierungskonten und Behandeln des Ablaufs von URL-Links ausführen können. Erhalten Sie eine E-Mail mit einem Link zur Aktivierung.

Registrierungs-E-Mail-Aktivierungsprozess

Benutzerregistrierung
2 Diesmal.
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.

Datenbank erstellen Tabelle

Wenn wir ein Konto registrieren, erfassen wir es normalerweise in der Benutzertabelle Unsere ID, Benutzername, Passwort, E-Mail- oder Mobiltelefonnummer und ein Feld, das angibt, ob das Konto aktiviert ist oder nicht.

Das E-Mail-Feld 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 von Benutzerinformationen für E-Mail-Marketing verwendet werden. Das Folgende ist die Benutzerinformationstabelle. Tabellenstruktur von 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;

Statische HTML-Seite

Das Folgende ist ein Registrierungsformular für Benutzer kann Registrierungsinformationen eingeben, 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>

register.php schließt das Schreiben von Daten und das Versenden von E-Mails ab

Zuerststellen Sie eine Verbindung zur Datenbank her und geben Sie E-Mails ein Senden der Klasse smtp.class.php

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

Wir haben das Front-End-Verifizierungsformular weggelassen und schauen uns direkt das Programm an

$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 die Aktivierung Identifikationscode:

$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 aus Benutzername, Passwort und aktueller Uhrzeit besteht und durch MD5 verschlüsselt wird. 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()) {//写入成功,发邮件
  include_once("smtp.class.php");
  $smtpserver = "smtp.163.com"; //SMTP服务器
  $smtpserverport = 25; //SMTP服务器端口
  $smtpusermail = "hjl416148489_4@163.com"; //SMTP服务器的用户邮箱
  $smtpuser = "hjl416148489_4@163.com"; //SMTP服务器的用户帐号
  $smtppass = "hjl7233163"; //SMTP服务器的用户密码
  $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); //这里面的一个true是表示使用身份验证,否则不使用身份验证.
  $emailtype = "HTML"; //信件类型,文本:text;网页:HTML
  $smtpemailto = $email;
  $smtpemailfrom = $smtpusermail;
  $emailsubject = "用户帐号激活";
  $emailbody = "亲爱的" . $username . ":<br/>感谢您在我站注册了新帐号。<br/>请点击链接激活您的帐号。<br/>
  <a href=&#39;http://www.php.cn/demo/active.php?verify=" . $token . "&#39; target=&#39;_blank&#39;>http://www.php.cn/demo/active.php?verify=" . $token . "</a>
  <br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问,该链接24小时内有效。<br/>如果此次激活请求非你本人所发,请忽略本邮件。<br/>
  ";
  $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);
  if ($rs == 1) {
    $msg = &#39;恭喜您,注册成功!<br/>请登录到您的邮箱及时激活您的帐号!&#39;;
  } else {
    $msg = $rs;
  }
  echo $msg;
}

active.php

active.php empfängt die übermittelten Linkinformationen und erhält den Wert des Parameters „Verify“, bei dem es sich um den Aktivierungserkennungscode 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.

$email ist die E-Mail, die wir bei der Registrierung verwendet haben, und wir verwenden die Zeichenfolge für den Anforderungsteil der URL. Wir verwenden den Server, um sie zu verschlüsseln Senden Sie diese E-Mail. Senden Sie eine Aktivierungs-E-Mail. Diese wird als Hyperlink im E-Mail-Client angezeigt und fordert Sie zum Klicken auf. Nach dem Klicken übertragen wir die E-Mail und den Schlüssel in die Datei „activate.php“, was bedeutet, dass wir mit der Ausführung beginnen Verifizierung und Aktivierung des Kontos.

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 erfolgreicher Aktivierung stellen Sie fest, dass das Token-Feld nicht mehr nützlich ist und können es löschen. Und der Statusaktivierungsstatus ändert sich auf 1. Jetzt ist das Konto aktiviert. Wenn sich der Benutzer anmeldet, prüft er zunächst, ob die Aktivierung aktiviert ist, und fährt dann mit den weiteren Schritten fort.

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie der Aktivierungscode für die Benutzer-E-Mail-Registrierung in PHP implementiert wird. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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