ホームページ >バックエンド開発 >PHPチュートリアル >PHP は、ユーザー登録後のメール認証とアカウントのアクティベーションを実装します。

PHP は、ユーザー登録後のメール認証とアカウントのアクティベーションを実装します。

高洛峰
高洛峰オリジナル
2016-11-21 10:45:341337ブラウズ

多くのウェブサイトでメンバーを登録すると、登録が完了すると、システムがユーザーのメールボックスにメールを自動的に送信します。このメールの内容は、ユーザーがアカウントをアクティブ化するためにクリックして開く必要があります。ウェブサイトに事前に登録されています。アクティベーションに成功した場合のみ、会員機能が正常に利用できるようになります。

この記事では、PHP+Mysql を使用してアカウントの登録、アクティベーション電子メールの送信、アクティベーション アカウントの確認、URL リンクの有効期限の処理などの機能を実行する方法を例を使用して説明します。

ビジネスプロセス

1. ユーザーは登録情報を送信します。

2. 現時点では、アカウントのステータスはアクティブ化されていません。

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

4. 構築されたアクティベーション識別コードを、ユーザーが送信した電子メール アドレスに URL として送信します。

5. ユーザーはメールにログインし、URL をクリックしてアクティブ化します。

6. アクティベーション識別コードを確認し、正しい場合はアカウントをアクティベートします。

データ テーブルを準備します

ユーザー情報テーブルの [電子メール] フィールドは非常に重要で、ユーザーの確認やパスワードの取得に使用でき、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

ユーザーは、処理のために登録情報を register.php に送信します。 register.php は、データの書き込みと電子メールの送信という 2 つの主要な機能を完了する必要があります。

まず、必要な 2 つのファイル、connect.php と smtp.class.php が含まれています。これらの 2 つのファイルは、外部で提供されるダウンロード パッケージに含まれています。

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

みんなで共有できる、非常に使いやすく強力な電子メール送信クラスもあります。PHPMailer を使用して、添付ファイル付きの電子メールを送信し、HTML コンテンツをサポートします。これを直接使用できます。

active.php

何も問題がなければ、アカウント登録時に入力したメールアドレスに helloweba からメールが届きます。この時点で、アクティベーションリンクを直接クリックして、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;

アクティベーションが成功したら、トークン フィールドがもう役に立たないことがわかります。これはクリアできます。次に、ユーザーがパスワードを取得する機能と電子メール認証を使用する機能について説明しますので、ご期待ください。

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