(上級) PHP は、ユーザー登録後の電子メール検証とアカウントのアクティブ化を実装します。
多くのウェブサイトでメンバーを登録すると、登録が完了すると、システムがユーザーのメールボックスにメールを自動的に送信します。このメールの内容は、ユーザーがアカウントをアクティブ化するためにクリックして開く必要があります。ウェブサイトに事前に登録されています。アクティベーションに成功した場合のみ、会員機能が正常に利用できるようになります。
この記事では、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['username'])); $query = mysql_query("select id from t_user where username='$username'"); $num = mysql_num_rows($query); if($num==1){ echo '用户名已存在,请换个其他的用户名'; exit; }
次に、ユーザーのパスワードを暗号化し、アクティベーション識別コードを構築します:
$password = md5(trim($_POST['password'])); //加密密码 $email = trim($_POST['email']); //邮箱 $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 ('$username','$password','$email','$token','$token_exptime','$regtime')"; 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='http://www.helloweba.com/demo/register/active.php?verify=".$token."' target= '_blank'>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 = '恭喜您,注册成功!<br/>请登录到您的邮箱及时激活您的帐号!'; }else{ $msg = $rs; } } echo $msg;
みんなで共有できる、非常に使いやすく強力な電子メール送信クラスもあります。PHPMailer を使用して、添付ファイル付きの電子メールを送信し、HTML コンテンツをサポートします。これを直接使用できます。
active.php
何も問題がなければ、アカウント登録時に入力したメールアドレスに helloweba からメールが届きます。この時点で、アクティベーションリンクを直接クリックして、active.php に処理を任せることができます。
active.php接收提交的链接信息,获取参数verify的值,即激活识别码。将它与数据表中的用户信息进行查询对比,如果有相应的数据集,判断是否过期,如果在有效期内则将对应的用户表中字段status设置1,即已激活,这样就完成了激活功能。
include_once("connect.php");//连接数据库 $verify = stripslashes(trim($_GET['verify'])); $nowtime = time(); $query = mysql_query("select id,token_exptime from t_user where status='0' and `token`='$verify'"); $row = mysql_fetch_array($query); if($row){ if($nowtime>$row['token_exptime']){ //24hour $msg = '您的激活有效期已过,请登录您的帐号重新发送激活邮件.'; }else{ mysql_query("update t_user set status=1 where id=".$row['id']); if(mysql_affected_rows($link)!=1) die(0); $msg = '激活成功!'; } }else{ $msg = 'error.'; } echo $msg;
激活成功后,发现token字段并没有用处了,您可以清空。接下来我们会讲解用户找回密码的功能,也要用到邮箱验证,敬请关注。
以上就是(进阶篇)PHP实现用户注册后邮箱验证,激活帐号的内容,更多相关内容请关注PHP中文网(www.php.cn)!

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

Deepseekの公式Webサイトは現在、ユーザーにショッピングエクスペリエンスを提供するための複数の割引アクティビティを開始しています。新規ユーザーはサインアップして10ドルのクーポンを取得し、視聴者全員に15%の限定時間割引を享受します。友人は報酬を獲得することもできます。また、買い物時に贈り物を償還するためにポイントを蓄積することができます。イベントの締め切りは違う。

PHPでは、予測不可能なトークンを使用して、CSRF攻撃を効果的に防ぐことができます。特定の方法には次のものが含まれます。1。フォームのCSRFトークンを生成および埋め込みます。 2.リクエストを処理するときにトークンの有効性を確認します。

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。
