ホームページ  >  記事  >  バックエンド開発  >  PHP は、登録後に新規ユーザーのログイン機能を有効にするための確認メールを実装します

PHP は、登録後に新規ユーザーのログイン機能を有効にするための確認メールを実装します

巴扎黑
巴扎黑オリジナル
2017-08-09 15:02:232394ブラウズ

この記事では、PHP に実装されているユーザー登録と認証メールのアクティベーション機能を主に紹介し、PHP メールを介してユーザーをアクティベートする際のデータベースとメール関連の操作スキルを詳細に分析します。必要な友人は参考にしてください。 PHPで実装されたアクティベーション例とユーザー登録確認メール機能。参考までに皆さんと共有してください。詳細は次のとおりです:

ここでは、PHP + Mysql を使用してアカウントの登録、アクティベーション電子メールの送信、アクティベーション アカウントの検証、および URL の処理の機能を完了する方法を例と組み合わせて紹介します。リンクの有効期限。

登録メールアクティベーションプロセス1. ユーザー登録 2. この時点ではアカウントはアクティベートされていません。

3. ユーザー名、パスワード、またはその他の識別文字を暗号化して、アクティベーション識別コード (アクティベーション コードと呼ぶこともできます) を形成します。

4. 構築されたアクティベーション識別コードを、ユーザーが送信した電子メール アドレスの URL に送信します。
5. ユーザーはメールにログインし、URL をクリックしてアクティブ化します。
6. アクティベーション識別コードを確認し、正しい場合はアカウントをアクティベートします。


t_user.sql

ユーザー情報テーブルの [電子メール] フィールドは非常に重要であり、ユーザーの確認、パスワードの取得に使用でき、Web サイトのパーティーでも電子メールのユーザー情報を収集するために使用できます。以下はユーザーです。 情報テーブル 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

以下は、ユーザーがユーザー名、パスワード、電子メールなどの登録情報を入力できる登録フォームです。

<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でデータの書き込みとメールの送信が完了します

まずデータベースに接続し、メール送信クラスsmtp.class.phpを組み込みます

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

フロントエンドは省略しています検証フォームを作成し、それを直接確認します プログラム

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

次に、ユーザーのパスワードを暗号化し、アクティベーション識別コードを構築します:

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

上記のコードでは、$token は構築されたアクティベーション識別コードであり、次のように構成されます。ユーザー名、パスワード、現在時刻をmd5暗号化して取得します。 $token_exptime は、アクティベーション リンク URL の有効期限を設定するために使用されます。この例では、アクティベーションは 24 時間以内に有効です。最後に、これらのフィールドがデータ テーブル t_user に挿入されます。

データが正常に挿入されたら、電子メール送信クラスを呼び出して、ユーザーがクリックしたときに、構築されたアクティベーション識別コードをアクティベーション リンクとして完全な URL に送信することに注意してください。詳細コード:

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.jb51.net/demo/active.php?verify=" . $token . "&#39; target=&#39;_blank&#39;>http://www.jb51.net/demo/active.php?verify=" . $token . "</a><br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问,该链接24小时内有效。<br/>如果此次激活请求非你本人所发,请忽略本邮件。<br/><p style=&#39;text-align:right&#39;>-------- 脚本之家http://www.jb51.net敬上</p>";
  $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);
  if ($rs == 1) {
    $msg = &#39;恭喜您,注册成功!<br/>请登录到您的邮箱及时激活您的帐号!&#39;;
  } else {
    $msg = $rs;
  }
  echo $msg;
}


active.php

active.phpは、送信されたリンク情報を受信し、アクティベーション識別コードであるパラメータverifyの値を取得します。クエリを実行し、データ テーブル内のユーザー情報と比較します。該当するデータ セットが存在する場合は、有効期限内であれば、対応するユーザー テーブルのステータス フィールドを 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;

アクティベーションが成功すると、トークン フィールドがもう役に立たないことがわかり、クリアできます。そしてステータス発動ステータスが1に変化します。

以上がPHP は、登録後に新規ユーザーのログイン機能を有効にするための確認メールを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。