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 회원 들 이 비밀 번 호 를 찾 는 기능 의 간단 한 실현 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.