ホームページ  >  記事  >  バックエンド開発  >  PHP+Mysql+jQueryでパスワード検索機能を実現

PHP+Mysql+jQueryでパスワード検索機能を実現

墨辰丷
墨辰丷オリジナル
2018-06-08 16:03:301821ブラウズ

この記事では主に PHP Mysql jQuery のパスワード検索機能を紹介します。興味のある方はぜひ参考にしてください。

一般的に知られているパスワード取得機能では、パスワードは暗号化されて保存されているため、実際には忘れたパスワードを取得することはできません。通常、開発者はユーザー情報を確認した後、プログラムを通じて新しいパスワードを生成するか、特定のリンクを生成して送信します。ユーザーのメールボックスに電子メールを送信すると、ユーザーは電子メール リンクから Web サイトのパスワード リセット モジュールに新しいパスワードをリセットします。

もちろん、現在、一部の Web サイトでは、パスワードを取得するために携帯電話のテキスト メッセージを使用しています。原則として、確認用の電子メールを送信するのと同じように、パスワードをリセットする必要があります。パスワードの取得プロセスを完了します。

一般的な手順は次のとおりです:

1. フォームへの登録時に電子メール アドレスを入力します。ユーザーの電子メール アドレスが正しいことを確認します。メールボックスが Web サイトのユーザー テーブルに存在する場合は、ユーザーにメッセージが表示されます。ユーザーのメールボックスがユーザー テーブルに存在する場合は、ユーザー情報を確認するために使用する文字列を結合します。を作成し、それをユーザーのメールボックスに送信します。
4. ユーザーはメールボックスにログインし、Web サイト検証プログラムへの URL リンクをクリックします。ユーザーが要求した文字列を介してユーザー テーブルを検索し、ユーザー情報が正しいかどうかを比較します。 正しい場合は、パスワードのリセット ページに移動して、新しいパスワードの設定を再試行します。無効です。


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 、sendmail.php は、メールボックスが存在するかどうかを確認し、電子メールを送信する役割を果たし、対応する処理結果をフロント ページに返します。

 $(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 ライブラリ ファイルをページにロードすることを忘れないでください。一部の学生は、80% の場合、jb51.net の読み込みパスが原因でダウンロードしたデモを使用できないのかと私に尋ねます。 jquery またはその他のファイルが間違っており、必要なファイルが読み込まれていません。

PHP

sendmail.php は、電子メールがシステム ユーザー テーブルに存在するかどうかを確認する必要があります。存在する場合は、ユーザー情報を読み取り、ユーザー ID、ユーザー名を起動します。 md5 暗号化は、パスワードを取得するための検証コードとして特別な文字列を生成し、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.jb51.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 = "jb51.net - 找回密码"; 
  $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 からのパスワード取得メールが届きます。メールの内容に、確認用の jb51.net への URL リンクがあります。

 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 jQuery MySql 実装

Yii の基本PHP のフレームワーク使用法

PHP デザイン パターンの基礎知識と応用

以上がPHP+Mysql+jQueryでパスワード検索機能を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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