ホームページ  >  記事  >  バックエンド開発  >  忘れたパスワードを取得する機能をphpに実装する方法

忘れたパスワードを取得する機能をphpに実装する方法

藏色散人
藏色散人オリジナル
2020-11-24 10:07:503444ブラウズ

php は、パスワードを忘れた場合の関数メソッドを実装しています。最初にフォームからの登録時に電子メール アドレスを入力し、次にユーザーの電子メール アドレスが正しいかどうかを確認し、次にユーザー情報の文字列を確認して URL を構築し、ユーザーの電子メール アドレスに送信し、最後にユーザーを実装します。メールボックスにログインして電子メールを受信し、パスワード リセット ページにアクセスして新しいパスワードをリセットします。

忘れたパスワードを取得する機能をphpに実装する方法

おすすめ:「PHP ビデオチュートリアル

このチュートリアルの動作環境:Windows 7 システム、PHP バージョン5.6、この方法はすべてのブランドのコンピューターで機能します。

PHP Mysql jQuery はパスワード取得機能を実装します

もちろん、一部の Web サイトでは、携帯電話のテキスト メッセージを介してパスワードを取得する方法も備えています。確認のために電子メールを送信する場合と同様に、パスワードを取得するプロセスを完了するにはパスワードをリセットする必要があることを明確にしてください。

この記事では、PHP Mysql jQuery を使用してパスワード取得機能を実装します。一般的な手順は次のとおりです:

1. 登録時にフォームに電子メール アドレスを入力します;

2ユーザーの確認 電子メール アドレスは正しいですか? ユーザーの電子メール アドレスが Web サイトのユーザー テーブルに存在しない場合は、ユーザーの電子メール アドレスが登録されていないことを示すプロンプトが表示されます;

3. 電子メールを送信します。ユーザーの電子メール アドレスがユーザー テーブルに存在する場合は、ユーザー情報の検証に使用された文字列を結合し、URL を構築してユーザーのメールボックスに送信します。

4. ユーザーは、メールボックスにアクセスして電子メールを受信し、URL をクリックして Web サイト検証プログラムにリンクします;

5. Web サイト プログラムは、ユーザーが要求した文字列を渡します ローカル ユーザー テーブルにクエリを実行し、ユーザー情報が正しいかどうかを比較します。

6. 正しい場合は、パスワードのリセット ページに移動して新しいパスワードをリセットします。そうでない場合は、ユーザー認証が無効であることを示すメッセージが表示されます。

HTML

パスワード取得ページにページを配置します。このページでは、ユーザーが登録に使用する電子メール アドレスを入力し、インタラクションを処理するフロントエンド JS を送信する必要があります。

<p><strong>输入您注册的电子邮箱,找回密码:</strong></p>
<p><input type="text" class="input" name="email" id="email"><span id="chkmsg"></span></p>
<p><input type="button" class="btn" id="sub_btn" value="提 交"></p>

jQuery

ユーザーがメール アドレスを入力して送信をクリックすると、jQuery はまずメールの形式が正しいかどうかを確認し、正しい場合は Ajax リクエストをバックグラウンドの sendmail.php に送信します。検証を担当します。メールボックスが存在するかどうかを確認してメールを送信すると、対応する処理結果がフロント ページに返されます。jQuery コードを参照してください:

$(function(){
$("#sub_btn").click(function(){
var email = $("#email").val();
var preg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/; //匹配Email
if(email==&#39;&#39; || !preg.test(email)){
$("#chkmsg").html("请填写正确的邮箱!");
}else{
$("#sub_btn").attr("disabled","disabled").val(&#39;提交中..&#39;).css("cursor","default");
$.post("sendmail.php",{mail:email},function(msg){
if(msg=="noreg"){
$("#chkmsg").html("该邮箱尚未注册!");
$("#sub_btn").removeAttr("disabled").val(&#39;提 交&#39;).css("cursor","pointer");
}else{
$(".demo").html("<h3>"+msg+"</h3>");
}
});
}
});
})

上記で使用した jQuery コードは非常に便利で、フロントエンドの対話型操作を完了するための簡潔な内容 jQuery に基づいた一定の知識がある場合、上記のコードは一目瞭然であり、説明は必要ありません。

もちろん、ページ内に jQuery ライブラリ ファイルをロードすることを忘れないでください。学生からよく、helloweba.net からダウンロードしたデモが使用できないのはなぜかと尋ねられます。80% のケースは間違ったことが原因です。 jqueryなどのファイルの読み込みパス 必要なファイルを読み込みます。

PHP

#sendmail.php は、電子メールがシステム ユーザー テーブルに存在するかどうかを確認する必要があります。存在する場合は、ユーザー情報を読み取り、md5 暗号化を使用してユーザー ID の特殊文字を生成します、ユーザー名、パスワード。この文字列はパスワードを取得するための検証コードとして使用され、URL が構築されます。同時に、URL リンクの適時性を制御するために、ユーザーがパスワード取得アクションを送信したときに操作時間を記録し、最後にメール送信クラスを呼び出してユーザーのメールボックスにメールを送信します。 class smtp.class.php がパッケージ化されていますのでダウンロードしてください。

include_once("connect.php");//连接数据库
$email = stripslashes(trim($_POST[&#39;mail&#39;]));
$sql = "select id,username,password from `t_user` where `email`=&#39;$email&#39;";
$query = mysql_query($sql);
$num = mysql_num_rows($query);
if($num==0){//该邮箱尚未注册!
echo &#39;noreg&#39;;
exit;
}else{
$row = mysql_fetch_array($query);
$getpasstime = time();
$uid = $row[&#39;id&#39;];
$token = md5($uid.$row[&#39;username&#39;].$row[&#39;password&#39;]);//组合验证码
$url = "http://www.helloweba.net/demo/resetpass/reset.php?email=".$email."
&token=".$token;//构造URL
$time = date(&#39;Y-m-d H:i&#39;);
$result = sendmail($time,$email,$url);
if($result==1){//邮件发送成功
$msg = &#39;系统已向您的邮箱发送了一封邮件<br/>请登录到您的邮箱及时重置您的密码!&#39;;
//更新数据发送时间
mysql_query("update `t_user` set `getpasstime`=&#39;$getpasstime&#39; where id=&#39;$uid &#39;");
}else{
$msg = $result;
}
echo $msg;
}
//发送邮件
function sendmail($time,$email,$url){
include_once("smtp.class.php");
$smtpserver = ""; //SMTP服务器,如smtp.163.com
    $smtpserverport = 25; //SMTP服务器端口
    $smtpusermail = ""; //SMTP服务器的用户邮箱
    $smtpuser = ""; //SMTP服务器的用户帐号
    $smtppass = ""; //SMTP服务器的用户密码
    $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); 
    //这里面的一个true是表示使用身份验证,否则不使用身份验证.
    $emailtype = "HTML"; //信件类型,文本:text;网页:HTML
    $smtpemailto = $email;
    $smtpemailfrom = $smtpusermail;
    $emailsubject = "Helloweba.com - 找回密码";
    $emailbody = "亲爱的".$email.":<br/>您在".$time."提交了找回密码请求。请点击下面的链接重置密码
(按钮24小时内有效)。<br/><a href=&#39;".$url."&#39;target=&#39;_blank&#39;>".$url."</a>";
    $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);
return $rs;
}

わかりました。この時点で、メールボックスに helloweba からのパスワード取得メールが届きます。メールの内容に URL リンクがあります。確認するには、helloweba.net のreset.php へのリンクをクリックしてください。メール。

include_once("connect.php");//连接数据库
$token = stripslashes(trim($_GET[&#39;token&#39;]));
$email = stripslashes(trim($_GET[&#39;email&#39;]));
$sql = "select * from `t_user` where email=&#39;$email&#39;";
$query = mysql_query($sql);
$row = mysql_fetch_array($query);
if($row){
$mt = md5($row[&#39;id&#39;].$row[&#39;username&#39;].$row[&#39;password&#39;]);
if($mt==$token){
if(time()-$row[&#39;getpasstime&#39;]>24*60*60){
$msg = &#39;该链接已过期!&#39;;
}else{
//重置密码...
$msg = &#39;请重新设置密码,显示重置密码表单,<br/>这里只是演示,略过。&#39;;
}
}else{
$msg =  &#39;无效的链接&#39;;
}
}else{
$msg =  &#39;错误的链接!&#39;;
}
echo $msg;

reset.php は、まずパラメータ email と token を受け取り、その email に基づいてデータ テーブル t_user にメールが存在するかどうかを確認し、存在する場合はユーザーの情報を取得し、トークンの結合方法は次のようになります。 sendmail.php と同じ トークン値を構築し、URL で渡されたトークンと比較します。現在時刻とメール送信時刻の差が 24 時間以上ある場合、「リンクは次のとおりです」というプロンプトが表示されます。それ以外の場合は、リンクが有効であることを意味し、リセット ページにリダイレクトされます。パスワードの設定ページで、最後にユーザーが自分で新しいパスワードを設定します。

要約: この記事による登録電子メールの検証とパスワードの取得を通じて、Web サイト開発における電子メール送信のアプリケーションとその重要性がわかりました。もちろん、現在では SMS 検証アプリケーションも人気があり、関連する SMS インターフェイスが必要です。接続するだけです。

最後に、データ テーブル t_user 構造をアタッチします:

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(30) NOT NULL,
  `password` varchar(32) NOT NULL,
  `email` varchar(50) NOT NULL,
  `getpasstime` int(10) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

以上が忘れたパスワードを取得する機能をphpに実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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