ホームページ  >  記事  >  バックエンド開発  >  (上級) PHP+Mysql+jQuery によるパスワードの取得

(上級) PHP+Mysql+jQuery によるパスワードの取得

黄舟
黄舟オリジナル
2017-02-07 09:14:231153ブラウズ

コードは次のとおりです:

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

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

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

1. ユーザーのメール アドレスが正しいかどうかを確認します。ユーザーの電子メール アドレスが Web サイトのユーザー テーブルに存在しない場合は、ユーザーのメールボックスが登録されていないことを示すメッセージが表示されます。

3. ユーザーのメールボックスがユーザー テーブルに存在する場合は、文字列を結合します。ユーザー情報を確認し、ユーザーのメールボックスに送信する URL を作成するために使用されます

4. ユーザーはメールボックスにログインし、Web サイト検証プログラムへの URL リンクをクリックします。 Web サイト プログラムは、ユーザーが要求した文字列を介してローカル ユーザー テーブルをクエリし、ユーザー情報が正しいかどうかを比較します。

6. 正しい場合は、パスワード設定ページで新しいパスワードを設定します。検証が無効であることをユーザーに通知します。

パスワード取得ページに、登録に使用した電子メール アドレスを入力することをユーザーに要求するページを配置し、インタラクションを処理するフロントエンド 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 はまず電子メールの形式が正しいかどうかを確認し、正しい場合は、バックグラウンドの sendmail.php に Ajax リクエストを送信します。メールアドレスが存在し、メールを送信すると、対応するメールが返されます。 処理結果はフロントページに送信されます。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.com からダウンロードしたデモが使用できないのかをよく尋ねます。その理由は 80% の場合、jquery のロード パスです。または他のファイルが間違っており、必要なファイルが読み込まれていません。

sendmail.php は、電子メールがシステムのユーザー テーブルに存在するかどうかを確認する必要があります。存在する場合は、ユーザー情報を読み取り、md5 暗号化を使用してパスワードを取得するための確認コードとして特別な文字列を生成し、URL を構築します。同時に、URL リンクの適時性を制御するために、ユーザーがパスワード取得アクションを送信した操作時間を記録し、最後に電子メール送信クラスを呼び出してユーザーのメールボックスに電子メールを送信します。 email

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.com/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.com の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+Mysql+jQuery のパスワード取得コンテンツです。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。 )!

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