ホームページ >バックエンド開発 >PHPチュートリアル >PHPでユーザーメール登録アクティベーションコードを実装する方法の詳細な説明

PHPでユーザーメール登録アクティベーションコードを実装する方法の詳細な説明

伊谢尔伦
伊谢尔伦オリジナル
2017-07-15 13:23:045923ブラウズ

ユーザーがウェブサイトにログインして登録するときは、通常、ユーザー自身のメールアドレスを使用してウェブサイトからメールを受信し、アカウントを有効にする必要があります。その後、通常どおり使用できるようになります。 この記事 では、例を使用して、PHP+Mysql を使用して、アカウントの登録、アクティベーション電子メールの送信、アクティベーション アカウントの確認、URL リンクの有効期限の処理などの機能を完了する方法を紹介します。アクティベートするためのリンクが記載された電子メールを受信します。

登録メールアクティベーションプロセス

1. ユーザー登録
2. この時点ではアカウントはアクティベートされていません。
3. ユーザー名、パスワード、またはその他の識別文字を暗号化して、アクティベーション識別コード (アクティベーション コードと呼ぶこともできます) を形成します。
4. 構築されたアクティベーション識別コードを、ユーザーが送信した電子メール アドレスの URL に送信します。
5. ユーザーはメールにログインし、URL をクリックしてアクティブ化します。
6. アクティベーション識別コードを確認し、正しい場合はアカウントをアクティベートします。

データベーステーブルを作成する

アカウントを登録するとき、通常、ID、ユーザー名、パスワード、電子メールまたは携帯電話番号をユーザーテーブルに記録し、アカウントがアクティブ化されているかどうかを記録します。分野。

ユーザー情報テーブルの [電子メール] フィールドは非常に重要であり、ユーザーの確認やパスワードの取得に使用でき、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.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 は、送信されたリンク情報を受信し、アクティベーション識別コードであるパラメーター verify の値を取得します。クエリを実行し、データ テーブル内のユーザー情報と比較します。該当するデータ セットが存在する場合は、有効期限内であれば、対応するユーザー テーブルのステータス フィールドを 1 に設定します。これでアクティベーション機能が完了します。

$email は登録時に使用したメールアドレスです。urlencode() を使用してエンコードし、URL のリクエスト部分の文字列を使用します。$activation_key は、アクティベーションメールを送信するためにサーバーを使用します。これは電子メール クライアントにハイパーリンクとして表示され、クリックすると、電子メールとキーが activate.php ファイルに転送されます。これは、検証の実行とアカウントのアクティブ化を開始することを意味します。 。

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 までご連絡ください。