PHP 회원 비밀번호 찾기 기능 의 간단 한 실현

사 고 를 설정 하 다.
1.사용자 가 등록 할 때 E-MAIL 메 일 을 제공 해 야 하 는데 그 목적 은 바로 이 메 일 로 비밀 번 호 를 찾 는 것 입 니 다.
2.사용자 가 비밀번호 나 사용자 이름 을 잊 어 버 렸 을 때 로그 인 페이지 의'비밀번호 찾기'하이퍼링크 를 클릭 하여 폼 을 열 고 등록 용 E-MAIL 메 일 을 입력 하여 제출 합 니 다.
3.시스템 은 이 메 일 을 통 해 데이터 베이스 에서 이 사용자 의 정 보 를 찾 고 이 사용자 의 비밀 번 호 를 임시 비밀번호 로 업데이트 합 니 다(예 를 들 어 12345678).
4.시스템 은 Jmail 기능 을 통 해 해당 사용자 의 정 보 를 해당 사용자 의 메 일 로 보 냅 니 다(내용 은 사용자 이름,임시 비밀번호,사용자 에 게 임시 비밀 번 호 를 신속하게 수정 하 라 고 알 리 는 제시 어 포함).
5.사용자 가 임시 비밀번호 로 로그 인 할 수 있 습 니 다.
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 는 먼저 메 일 형식 이 정확 한 지 검증 합 니 다.정확 하 다 면 배경 sendmail.php 에 Ajax 요청 을 보 냅 니 다.sendmail.php 는 메 일이 존재 하고 메 일 을 보 내 는 지 검증 하고 해당 하 는 처리 결 과 를 프론트 페이지 로 되 돌려 줍 니 다.jQuery 코드 를 보십시오.
코드 는 다음 과 같다.

$(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>"); 
} 
}); 
} 
}); 
})
이상 에서 사용 한 jQuery 코드 는 전단 상호작용 을 간결 하 게 완성 할 수 있 습 니 다.만약 에 일정한 jQuery 기반 이 있다 면 위의 코드 는 한눈 에 알 수 있 고 설명 이 많 지 않 습 니 다.
물론 페이지 에 jQuery 라 이브 러 리 파일 을 불 러 오 는 것 을 잊 지 마 세 요.어떤 친구 들 은 인터넷 에서 demo 를 다운로드 하 는데 왜 사용 할 수 없 느 냐 고 자주 물 어 봅 니 다.그 80%는 jquery 나 다른 파일 로 딩 경로 가 잘못 되 어 필요 한 파일 을 불 러 오지 않 았 습 니 다.
PHP
sendmail.php 는 Email 에 시스템 사용자 시트 가 존재 하 는 지 검증 해 야 합 니 다.있 으 면 사용자 정 보 를 읽 고 사용자 id,사용자 이름과 비밀 번 호 를 깨 우 는 md5 암호 화 를 암호 화 하여 비밀 번 호 를 찾 는 인증 코드 로 특별한 문자열 을 만 든 다음 URL 을 구성 해 야 합 니 다.또한 저 희 는 URL 링크 의 실효 성 을 제어 하기 위해 사용자 가 비밀 번 호 를 찾 는 동작 을 제출 하 는 작업 시간 을 기록 하고 마지막 으로 메 일 발송 류 를 사용자 메 일 로 보 냅 니 다.메 일 류 smtp.class.phop 을 보 냈 습 니 다.다운로드 하 십시오.
코드 는 다음 과 같다.

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 = "/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 = "www.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; 
}
자,이 럴 때 메 일 은 helloweba 에서 온 비밀 번 호 를 받 고 메 일 을 찾 습 니 다.메 일 내용 에 URL 링크 가 있 습 니 다.이 링크 를 누 르 면 reset.phop 으로 메 일 을 확인 합 니 다.
코드 는 다음 과 같다.

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 에 이 Email 이 존재 하 는 지 여부 입 니 다.존재 하면 이 사용자 의 정 보 를 얻 고 sendmail.php 의 token 조합 방식 과 같이 token 값 을 구축 한 다음 url 에서 보 내 온 token 과 비교 합 니 다.현재 시간 이 메 일 을 보 낼 때 와 24 시간 이상 차이 가 나 면"이 링크 가 만 료 되 었 습 니 다!"반대로 링크 가 유효 하 다 는 것 을 설명 하고 비밀번호 리 셋 페이지 로 전환 하면 마지막 으로 사용자 가 스스로 새 비밀 번 호 를 설정 하 는 것 이다.
소결:메 일 등록 검증 과 본 메 일 을 통 해 비밀 번 호 를 찾 습 니 다.우 리 는 메 일 을 보 내 는 것 이 사이트 개발 에서 의 응용 과 그 중요성 을 알 고 있 습 니 다.물론 지금도 문자 검증 애플 리 케 이 션 이 유행 하고 있 습 니 다.이 는 관련 문자 인터페이스 도 킹 이 필요 합 니 다.
마지막 으로 데이터 시트 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;
smtp.class.php 클래스 파일
코드 는 다음 과 같다.

<?php

class Smtp{

/* Public Variables */

var $smtp_port;

var $time_out;

var $host_name;

var $log_file;

var $relay_host;

var $debug;

var $auth;

var $user;

var $pass;

/* Private Variables */
var $sock;

/* Constractor */

function smtp($relay_host = "", $smtp_port = 25, $auth = false, $user, $pass) {
$this->debug = false;

$this->smtp_port = $smtp_port;

$this->relay_host = $relay_host;

$this->time_out = 30; //is used in fsockopen()

$this->auth = $auth; //auth

$this->user = $user;

$this->pass = $pass;

$this->host_name = "localhost"; //is used in HELO command
$this->log_file = "";

$this->sock = false;
}

/* Main Function */

function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "") {
$mail_from = $this->get_address($this->strip_comment($from));

$body = ereg_replace("(^|(rn))(.)", "1.3", $body);

$header .= "MIME-Version:1.0rn";

if ($mailtype == "HTML") {
$header .= "Content-Type:text/htmlrn";
}

$header .= "To: " . $to . "rn";

if ($cc != "") {
$header .= "Cc: " . $cc . "rn";
}

$header .= "From(www.jb51.net): $from<" . $from . ">rn";

$header .= "Subject: " . $subject . "rn";

$header .= $additional_headers;

$header .= "Date: " . date("r") . "rn";

$header .= "X-Mailer:By Redhat (PHP/" . phpversion() . ")rn";

list ($msec, $sec) = explode(" ", microtime());

$header .= "Message-ID: <" . date("YmdHis", $sec) . "." . ($msec * 1000000) . "." . $mail_from . ">rn";

$TO = explode(",", $this->strip_comment($to));

if ($cc != "") {
$TO = array_merge($TO, explode(",", $this->strip_comment($cc)));
}

if ($bcc != "") {
$TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));
}

$sent = true;

foreach ($TO as $rcpt_to) {
$rcpt_to = $this->get_address($rcpt_to);

if (!$this->smtp_sockopen($rcpt_to)) {
$this->log_write("Error: Cannot send email to " . $rcpt_to . "n");

$sent = false;

continue;
}

if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {
$this->log_write("E-mail has been sent to <" . $rcpt_to . ">n");
} else {
$this->log_write("Error: Cannot send email to <" . $rcpt_to . ">n");

$sent = false;
}

fclose($this->sock);

$this->log_write("Disconnected from remote hostn");
}

return $sent;
}

/* Private Functions */

function smtp_send($helo, $from, $to, $header, $body = "") {
if (!$this->smtp_putcmd("HELO", $helo)) {
return $this->smtp_error("sending HELO command");
}
// auth
if ($this->auth) {
if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) {
return $this->smtp_error("sending HELO command");
}

if (!$this->smtp_putcmd("", base64_encode($this->pass))) {
return $this->smtp_error("sending HELO command");
}
}

if (!$this->smtp_putcmd("MAIL", "FROM:<" . $from . ">")) {
return $this->smtp_error("sending MAIL FROM command");
}

if (!$this->smtp_putcmd("RCPT", "TO:<" . $to . ">")) {
return $this->smtp_error("sending RCPT TO command");
}

if (!$this->smtp_putcmd("DATA")) {
return $this->smtp_error("sending DATA command");
}

if (!$this->smtp_message($header, $body)) {
return $this->smtp_error("sending message");
}

if (!$this->smtp_eom()) {
return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");
}

if (!$this->smtp_putcmd("QUIT")) {
return $this->smtp_error("sending QUIT command");
}

return true;
}

function smtp_sockopen($address) {
if ($this->relay_host == "") {
return $this->smtp_sockopen_mx($address);
} else {
return $this->smtp_sockopen_relay();
}
}

function smtp_sockopen_relay() {
$this->log_write("Trying to " . $this->relay_host . ":" . $this->smtp_port . "n");

$this->sock = @ fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);

if (!($this->sock && $this->smtp_ok())) {
$this->log_write("Error: Cannot connenct to relay host " . $this->relay_host . "n");

$this->log_write("Error: " . $errstr . " (" . $errno . ")n");

return false;
}

$this->log_write("Connected to relay host " . $this->relay_host . "n");

return true;
;
}

function smtp_sockopen_mx($address) {
$domain = ereg_replace("^.+@([^@]+)$", "1", $address);

if (!@ getmxrr($domain, $MXHOSTS)) {
$this->log_write("Error: Cannot resolve MX "" . $domain . ""n");

return false;
}

foreach ($MXHOSTS as $host) {
$this->log_write("Trying to " . $host . ":" . $this->smtp_port . "n");

$this->sock = @ fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);

if (!($this->sock && $this->smtp_ok())) {
$this->log_write("Warning: Cannot connect to mx host " . $host . "n");

$this->log_write("Error: " . $errstr . " (" . $errno . ")n");

continue;
}

$this->log_write("Connected to mx host " . $host . "n");

return true;
}

$this->log_write("Error: Cannot connect to any mx hosts (" . implode(", ", $MXHOSTS) . ")n");

return false;
}

function smtp_message($header, $body) {
fputs($this->sock, $header . "rn" . $body);

$this->smtp_debug("> " . str_replace("rn", "n" . "> ", $header . "n> " . $body . "n> "));

return true;
}

function smtp_eom() {
fputs($this->sock, "rn.rn");

$this->smtp_debug(". [EOM]n");

return $this->smtp_ok();
}

function smtp_ok() {
$response = str_replace("rn", "", fgets($this->sock, 512));

$this->smtp_debug($response . "n");

if (!ereg("^[23]", $response)) {
fputs($this->sock, "QUITrn");

fgets($this->sock, 512);

$this->log_write("Error: Remote host returned "" . $response . ""n");

return false;
}

return true;
}

function smtp_putcmd($cmd, $arg = "") {
if ($arg != "") {
if ($cmd == "")
$cmd = $arg;

else
$cmd = $cmd . " " . $arg;
}

fputs($this->sock, $cmd . "rn");

$this->smtp_debug("> " . $cmd . "n");

return $this->smtp_ok();
}

function smtp_error($string) {
$this->log_write("Error: Error occurred while " . $string . ".n");

return false;
}

function log_write($message) {
$this->smtp_debug($message);

if ($this->log_file == "") {
return true;
}

$message = date("M d H:i:s ") . get_current_user() . "[" . getmypid() . "]: " . $message;

if (!@ file_exists($this->log_file) || !($fp = @ fopen($this->log_file, "a"))) {
$this->smtp_debug("Warning: Cannot open log file "" . $this->log_file . ""n");

return false;
;
}

flock($fp, LOCK_EX);

fputs($fp, $message);

fclose($fp);

return true;
}

function strip_comment($address) {
$comment = "([^()]*)";

while (ereg($comment, $address)) {
$address = ereg_replace($comment, "", $address);
}

return $address;
}

function get_address($address) {
$address = ereg_replace("([ trn])+", "", $address);

$address = ereg_replace("^.*<(.+)>.*$", "1", $address);

return $address;
}

function smtp_debug($message) {
if ($this->debug) {
echo $message . "
;";
}
}
}
?>
맨 뒤에 데이터베이스 연결 클래스 가 있 습 니 다.여 기 는 소개 하지 않 겠 습 니 다.여러분 은 백 본 사이트 에서 관련 데이터 베 이 스 를 찾 아 my sql 류 를 연결 할 수 있 습 니 다.
이상 의 PHP 회원 들 이 비밀 번 호 를 찾 는 기능 의 간단 한 실현 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기