Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon d'implémenter le code d'activation de l'enregistrement par courrier électronique de l'utilisateur en PHP

Explication détaillée de la façon d'implémenter le code d'activation de l'enregistrement par courrier électronique de l'utilisateur en PHP

伊谢尔伦
伊谢尔伦original
2017-07-15 13:23:045864parcourir

Lorsque les utilisateurs se connectent et s'inscrivent sur le site Web, ils doivent généralement utiliser leur propre adresse e-mail. L'adresse e-mail reçoit l'e-mail du site Web pour activer le compte, puis elle peut être utilisée normalement. Cet article utilisera des exemples pour présenter comment utiliser PHP+Mysql pour compléter les fonctions d'enregistrement d'un compte, d'envoi d'e-mails d'activation, de vérification des comptes d'activation et de gestion de l'expiration des liens URL. Recevez un e-mail avec un lien pour activer.

Processus d'activation par e-mail d'inscription

Inscription de l'utilisateur
2. Insérez les données utilisateur, le compte n'est pas activé à cette fois .
3. Chiffrez le nom d'utilisateur, le mot de passe ou d'autres caractères d'identification pour former un code d'identification d'activation (vous pouvez également l'appeler code d'activation).
4. Envoyez le code d'identification d'activation construit dans une URL à l'adresse e-mail soumise par l'utilisateur.
5. L'utilisateur se connecte à l'e-mail et clique sur l'URL pour l'activer.
6. Vérifiez le code d'identification d'activation et activez le compte s'il est correct.

Créer une base de données Table

Lorsque nous enregistrons un compte, nous l'enregistrons généralement dans la table des utilisateurs Notre identifiant, nom d'utilisateur, mot de passe, email ou numéro de téléphone portable, et un champ indiquant si le compte est activé ou non.

Le champ e-mail dans le tableau des informations utilisateur est très important. Il peut être utilisé pour vérifier les utilisateurs, récupérer des mots de passe et même pour les sites Web, il peut être utilisé pour collecter des informations utilisateur à des fins de marketing par e-mail. Voici la structure du tableau d'informations utilisateur de 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;

Page statique HTML

Ce qui suit est un formulaire d'inscription où les utilisateurs peut saisir les informations d'inscription, y compris le nom d'utilisateur, le mot de passe et l'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 termine l'écriture des données et l'envoi des e-mails

Tout d'abordconnectez-vous à la base de données et incluez l'e-mail envoi de classe smtp.class.php

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

Nous avons omis le formulaire de vérification frontale et regardons directement le programme

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

Ensuite, nous chiffrons le mot de passe de l'utilisateur et construisons l'activation code d'identification :

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

Dans le code ci-dessus, $token est le code d'identification d'activation construit, qui est composé du nom d'utilisateur, du mot de passe et de l'heure actuelle et est crypté par md5. $token_exptime est utilisé pour définir le délai d'expiration de l'URL du lien d'activation. L'utilisateur peut activer le compte dans ce délai. Dans cet exemple, l'activation est valide dans les 24 heures. Enfin, ces champs sont insérés dans la table de données t_user.

Lorsque les données sont insérées avec succès, appelez la classe d'envoi d'e-mails pour envoyer les informations d'activation à la boîte aux lettres enregistrée de l'utilisateur. Faites attention à former le code d'identification d'activation construit en une URL complète comme lien d'activation lorsque l'utilisateur clique. . Voici le code détaillé :

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 reçoit les informations de lien soumises et obtient la valeur. du paramètre verify, qui est le code de reconnaissance d'activation. Recherchez-le et comparez-le avec les informations utilisateur dans la table de données. S'il existe un ensemble de données correspondant, déterminez s'il a expiré. S'il est dans la période de validité, définissez le champ d'état dans la table utilisateur correspondante sur 1, ce qui signifie qu'il a expiré. a été activé. Ceci termine la fonction d’activation.

$email est l'e-mail que nous avons utilisé lors de l'inscription. Nous utilisons urlencode() pour l'encoder et utilisons la chaîne pour la partie requête de l'URL. $activation_key est le code d'activation que nous avons généré. envoyer cet e-mail Envoyez un e-mail d'activation, et celui-ci sera affiché sous forme d'hyperlien dans le client de messagerie, vous invitant à cliquer. Après avoir cliqué, nous transférerons l'e-mail et la clé vers le fichier activate.php, ce qui signifie que nous commencerons à exécuter. vérification et activation du compte.

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;

Après une activation réussie, vous constatez que le champ du jeton n'est plus utile et vous pouvez l'effacer. Et le statut d'activation du statut passe à 1. Maintenant, le compte est activé. Lors de la connexion, l'utilisateur vérifie d'abord si l'activation est activée, puis passe aux étapes suivantes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn