この記事では主に 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 はまずメールの形式が正しいかどうかを確認し、正しい場合は 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=='' || !preg.test(email)){
$("#chkmsg").html("请填写正确的邮箱!");
}else{
$("#sub_btn").attr("disabled","disabled").val('提交中..').css("cursor","default");
$.post("sendmail.php",{mail:email},function(msg){
if(msg=="noreg"){
$("#chkmsg").html("该邮箱尚未注册!");
$("#sub_btn").removeAttr("disabled").val('提 交').css("cursor","pointer");
}else{
$(".demo").html("<h3>"+msg+"</h3>");
}
});
}
});
})
PHP
sendmail.php は、電子メールがシステム ユーザー テーブルに存在するかどうかを確認する必要があります。存在する場合は、ユーザー情報を読み取り、ユーザー ID、ユーザー名を起動します。 md5 暗号化は、パスワードを取得するための検証コードとして特別な文字列を生成し、URL を構築します。同時に、URL リンクの適時性を制御するために、ユーザーがパスワード取得アクションを送信したときに操作時間を記録し、最後に電子メール送信クラスを呼び出してユーザーのメールボックスに電子メールを送信します。 class smtp.class.php がパッケージ化されていますのでダウンロードしてください。
include_once("connect.php");//连接数据库
$email = stripslashes(trim($_POST['mail']));
$sql = "select id,username,password from `t_user` where `email`='$email'";
$query = mysql_query($sql);
$num = mysql_num_rows($query);
if($num==0){//该邮箱尚未注册!
echo 'noreg';
exit;
}else{
$row = mysql_fetch_array($query);
$getpasstime = time();
$uid = $row['id'];
$token = md5($uid.$row['username'].$row['password']);//组合验证码
$url = "http://www.jb51.net/demo/resetpass/reset.php?email=".$email."
&token=".$token;//构造URL
$time = date('Y-m-d H:i');
$result = sendmail($time,$email,$url);
if($result==1){//邮件发送成功
$msg = '系统已向您的邮箱发送了一封邮件<br/>请登录到您的邮箱及时重置您的密码!';
//更新数据发送时间
mysql_query("update `t_user` set `getpasstime`='$getpasstime' where id='$uid '");
}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='".$url."'target='_blank'>".$url."</a>";
$rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);
return $rs;
}
include_once("connect.php");//连接数据库 $token = stripslashes(trim($_GET['token'])); $email = stripslashes(trim($_GET['email'])); $sql = "select * from `t_user` where email='$email'"; $query = mysql_query($sql); $row = mysql_fetch_array($query); if($row){ $mt = md5($row['id'].$row['username'].$row['password']); if($mt==$token){ if(time()-$row['getpasstime']>24*60*60){ $msg = '该链接已过期!'; }else{ //重置密码... $msg = '请重新设置密码,显示重置密码表单,<br/>这里只是演示,略过。'; } }else{ $msg = '无效的链接'; } }else{ $msg = '错误的链接!'; } 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 実装
以上がPHP+Mysql+jQueryでパスワード検索機能を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。