У дома други Точен индекс php потребителска регистрация. Проста система за регистрация на потребители

Точен индекс php потребителска регистрация. Проста система за регистрация на потребители

Процесът на създаване на система за регистрация е доста трудоемък. Трябва да напишете код, който проверява отново валидността на имейл адресите, изпраща имейли за потвърждение, предлага възможност за възстановяване на пароли, съхранява пароли на сигурно място, валидира формуляри за въвеждане и много повече. Дори когато направите всичко това, потребителите няма да са склонни да се регистрират, тъй като дори най-минималната регистрация изисква тяхната активност.

В днешния урок ще разработим проста система за регистрация, която няма да изисква никакви пароли! Резултатите ще бъдат система, която може лесно да се модифицира или интегрира в съществуващ уебсайт на PHP. Ако проявявате интерес, продължете да четете.

PHP

Сега сме готови да започнем с PHP кода. Основната функционалност на системата за регистрация се осигурява от класа User, който можете да видите по-долу. Класът използва (), което е минималистична библиотека с бази данни. Потребителският клас е отговорен за достъпа до базите данни, генерирането на маркери за влизане и валидирането им. Представя ни прост интерфейс, който може лесно да бъде включен в системата за регистрация на вашите уебсайтове, базирани на PHP.

User.class.php

// Частен екземпляр на ORM
частен $orm;

/**
* Намерете потребител по символичен низ. Вземат се само валидни жетони
* съображение. Токенът е валиден 10 минути след генерирането му.
* @param низ $token Знакът за търсене
* @return потребител
*/

Публична статична функция findByToken($token)(

// намерете го в базата данни и се уверете, че клеймото за време е правилно


->къде ("токен", $токен)
->where_raw("token_validity > NOW()")
->find_one();

Ако(!$резултат)(
връща невярно;
}

Връща нов потребител ($резултат);
}

/**
* Или влезте, или регистрирайте потребител.
* @return потребител
*/

Публична статична функция loginOrRegister($email)(

// Ако такъв потребител вече съществува, върнете го

Ако(Потребител::съществува($имейл))(
върне нов потребител ($ имейл);
}

// В противен случай го създайте и го върнете

Връщане на потребител::create($email);
}

/**
* Създайте нов потребител и го запазете в базата данни
* @param низ $email Имейл адресът на потребителя
* @return потребител
*/

Частна статична функция create($email)(

// Запишете нов потребител в базата данни и го върнете

$резултат = ORM::for_table("reg_users")->create();
$result->email = $email;
$result->save();

Връща нов потребител ($резултат);
}

/**
* Проверете дали такъв потребител съществува в базата данни и върнете булево значение.
* @param низ $email Имейл адресът на потребителя
* @return boolean
*/

Съществува публична статична функция($email)(

// Съществува ли потребителят в базата данни?
$резултат = ORM::for_table("reg_users")
->къде ("имейл", $имейл)
->броене();

Връща $result == 1;
}

/**
* Създайте нов потребителски обект
* @param $param ORM екземпляр, id, имейл или null
* @return потребител
*/

Публична функция __construct($param = null)(

If($param instanceof ORM)(

// Предаден е екземпляр на ORM
$this->orm = $param;
}
иначе if(is_string($param))(

// Предаден е имейл
$това->
->къде ("имейл", $param)
->find_one();
}
иначе(

If(is_numeric($param))(
// Идентификационният номер на потребител е предаден като параметър
$id = $param;
}
else if(isset($_SESSION["loginid"]))(

// Не е подаден потребителски идентификатор, погледнете сесията
$id = $_SESSION["loginid"];
}

$this->orm = ORM::for_table("reg_users")
->къде ("id", $id)
->find_one();
}

/**
* Генерира нов SHA1 токен за влизане, записва го в базата данни и го връща.
* @return низ
*/

Публична функция generateToken())(
// генерира токен за влезлия потребител. Запазете го в базата данни.

$token = sha1($this->email.time().rand(0, 1000000));

// Запазете токена в базата данни,
// и го маркирайте като валиден само за следващите 10 минути

$this->orm->set("токен", $токен);
$this->orm->set_expr("token_validity", "ADDTIME(NOW(),"0:10")");
$this->orm->save();

Върнете $token;
}

/**
*Влезте с този потребител
* @return void
*/

Публична функция login()

// Маркирайте потребителя като влязъл
$_SESSION["loginid"] = $this->orm->id;

// Актуализиране на db полето last_login
$this->orm->set_expr("last_login", "NOW()");
$this->orm->save();
}

/**
* Унищожаване на сесията и излизане на потребителя.
* @return void
*/

Изход от публична функция()
$_SESSION = масив();
деактивирано ($_SESSION);
}

/**
* Проверете дали потребителят е влязъл.
* @return boolean
*/

Публична функция loggedIn())(
return isset($this->orm->id) && $_SESSION["loginid"] == $this->orm->id;
}

/**
* Проверете дали потребителят е администратор
* @return boolean
*/

Публична функция isAdmin())(
върнете $this->rank() == "администратор";
}

/**
* Намерете типа потребител. Може да бъде администратор или обикновен.
* @return низ
*/

Публична функция rank())(
if($this->orm->rank == 1)(
върнете "администратор";
}

Връщане "редовно";
}

/**
* Магически метод за достъп до частните елементи
* $orm екземпляр като свойства на потребителския обект
* @param string $key Името на достъпното свойство
* @return смесено
*/

Публична функция __get($key)(
if(isset($this->orm->$key))(
върне $this->orm->$key;
}

Върни нула;
}
}
Токените се генерират с помощта на алгоритъм и се съхраняват в база данни. Използваме MySQL, за да настроим колоната token_validity на 10 минути. Когато валидираме токен, казваме на двигателя, че имаме нужда от токен, полето token_validity все още не е изтекло. По този начин ограничаваме времето, през което токенът ще бъде валиден.

Забележете, че използваме магическия метод __get() в края на документа за достъп до свойствата на потребителския обект. Това ни позволява достъп до данни, които се съхраняват в базата данни като свойства: $user->email, $user->token. Като пример, нека видим как можем да използваме този клас в следния кодов фрагмент:


Друг файл, който съхранява необходимата функционалност, е functions.php. Там имаме няколко помощни функции, които ни позволяват да поддържаме останалата част от кода по-чист.

Функции.php

Функция send_email($from, $to, $subject, $message)(

// Помощна функция за изпращане на имейл

$headers = "MIME-версия: 1.0" . "\r\n";
$headers .= "Content-type: text/plain; charset=utf-8" . "\r\n";
$headers .= "От: ".$от . "\r\n";

Обратна поща ($до, $тема, $съобщение, $заглавия);
}

функция get_page_url())(

// Намерете URL адреса на PHP файл

$url = "http".(празен($_SERVER["HTTPS"])?"":"s")."://".$_SERVER["SERVER_NAME"];

If(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")(
$url.= $_SERVER["REQUEST_URI"];
}
иначе(
$url.= $_SERVER["PATH_INFO"];
}

Връщане на $url;
}

функция rate_limit($ip, $limit_hour = 20, $limit_10_min = 10)(

// Броят опити за влизане за последния час от този IP адрес

$count_hour = ORM::for_table("reg_login_attempt")
->
->where_raw("ts > SUBTIME(NOW(),"1:00")")
->броене();

// Броят опити за влизане за последните 10 минути от този IP адрес

$count_10_min = ORM::for_table("reg_login_attempt")
->къде("ip", sprintf("%u", ip2long($ip)))
->where_raw("ts > SUBTIME(NOW(),"0:10")")
->броене();

If($count_hour > $limit_hour || $count_10_min > $limit_10_min)(
throw new Exception("Твърде много опити за влизане!");
}
}

функция rate_limit_tick($ip, $email)(

// Създайте нов запис в таблицата с опити за влизане

$login_attempt = ORM::for_table("reg_login_attempt")->create();

$login_attempt->email = $email;
$login_attempt->ip = sprintf("%u", ip2long($ip));

$login_attempt->save();
}

функция redirect($url)(
заглавие ("Местоположение: $url");
изход;
}
Функциите rate_limit и rate_limit_tick ни позволяват да ограничим броя на опитите за авторизация за определен период от време. Опитите за оторизация се записват в базата данни reg_login_attempt. Тези функции се задействат, когато формулярът за вход е потвърден, както можете да видите в следния кодов фрагмент.

Кодът по-долу е взет от index.php и отговаря за валидирането на формата за влизане. Той връща JSON отговор, който се управлява от jQuery кода, който видяхме в активи/js/script.js.

index.php

If(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))(

// Извежда JSON заглавка

Header("Content-type: application/json");

// Валиден ли е имейл адресът?

If(!isset($_POST["имейл"]) || !filter_var($_POST["имейл"], FILTER_VALIDATE_EMAIL))(
throw new Exception("Моля, въведете валиден имейл.");
}

// Това ще хвърли изключение, ако лицето е по-горе
// разрешените ограничения за опити за влизане (вижте functions.php за повече):
rate_limit($_SERVER["REMOTE_ADDR"]);

// Запишете този опит за влизане
rate_limit_tick($_SERVER["REMOTE_ADDR"], $_POST["имейл"]);

// Изпращане на съобщението до потребителя

$message = "";
$имейл = $_POST["имейл"];
$subject = "Вашата връзка за вход";

If(!User::exists($email))(
$subject = "Благодарим ви за регистрацията!";
$message = "Благодарим ви за регистрацията в нашия сайт!\n\n";
}

// Опит за влизане или регистрация на лицето
$user = Потребител::loginOrRegister($_POST["имейл"]);

$message.= "Можете да влезете от този URL:\n";
$message.= get_page_url()."?tkn=".$user->generateToken()."\n\n";

$message.= "Връзката ще изтече автоматично след 10 минути.";

$result = send_email($fromEmail, $_POST["email"], $subject, $message);

Ако(!$резултат)(
throw new Exception("Възникна грешка при изпращането на вашия имейл. Моля, опитайте отново.");
}

Die(json_encode(масив(
"message" => "Благодарим ви! Изпратихме връзка към входящата ви кутия. Проверете и папката си със спам."
)));
}
}
catch(Изключение $e)(

Die(json_encode(масив(
"грешка"=>1,
"съобщение" => $e->getMessage()
)));
}
При успешна авторизация или регистрация, горният код изпраща имейл до лицето с връзка за авторизация. Токенът е достъпен като $_GET променлива "tkn" поради генерирания URL адрес.

index.php

If(isset($_GET["tkn"]))(

// Това валиден токен за влизане ли е?
$user = Потребител::findByToken($_GET["tkn"]);

// Да! Влезте в потребителя и пренасочете към защитената страница.

$user->login();
пренасочване ("защитен.php");
}

// Невалиден Жетон. Пренасочване обратно към формата за вход.
пренасочване ("index.php");
}
Изпълнението на $user->login() ще създаде необходимите сесийни променливи, което ще позволи на потребителя да остане влязъл при следващи влизания.

Излизането от системата се осъществява приблизително по същия начин:

Index.php

If(isset($_GET["logout"]))(

$потребител = нов потребител();

If($user->loggedIn())(
$user->logout();
}

Пренасочване("index.php");
}
В края на кода пренасочваме потребителя отново към index.php, така че параметърът ?logout=1 в URL адреса се елиминира.

Нашият файл index.php също ще се нуждае от защита - не искаме вече влезли потребители да виждат формуляра. За да направим това, използваме метода $user->loggedIn():

Index.php

$потребител = нов потребител();

if($user->loggedIn())(
пренасочване ("защитен.php");
}
И накрая, нека да разгледаме как можете да защитите страницата на уебсайта си и да я направите достъпна само след разрешение:

защитен.php

// За да защитите всяка php страница на вашия сайт, включете main.php
// и създайте нов потребителски обект. Толкова е просто!

require_once "includes/main.php";

$потребител = нов потребител();

if(!$user->loggedIn())(
пренасочване ("index.php");
}
След тази проверка можете да сте сигурни, че потребителят е влязъл успешно. Ще имате също достъп до данни, които се съхраняват в базата данни като свойства на обекта $user. За да покажете имейла на потребителя и неговия ранг, използвайте следния код:

Echo "Вашият имейл: ".$user->email;
echo "Вашият ранг: ".$user->rank();
Тук rank() е методът, тъй като колоната за ранг в базата данни обикновено съдържа числа (0 за обикновени потребители и 1 за администратори) и ние трябва да преобразуваме всички тях в имена на ранг, което се реализира с помощта на този метод. За да преобразувате стандартен потребител в администратор, просто редактирайте записа на потребителя в phpmyadmin (или друга програма за база данни). Като администратор, потребителят няма да получи никакви специални възможности. Вие сами имате право да изберете какви права да предоставите на администраторите.

Готов!

С това нашата проста система за регистрация е готова! Можете да го използвате на съществуващ PHP сайт или да го модернизирате, за да отговаря на вашите собствени изисквания.

Здравейте, приятели, в този урок ще научим регистрация на потребители и влизане с помощта на съхранена PHP процедура.
Файлова структура за този урок
config.php
index.php
check_availability.php
login.php
добре дошли.php
излизане.php
Структура на sql таблица tblregistration

CREATE TABLE `tblregistration` (`id` int(11) NOT NULL, `FullName` varchar(200) NOT NULL, `EmailId` varchar(200) NOT NULL, `Password` varchar(255) NOT NULL, `RegDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=latin1;

config.php

Създайте db конфигурационен файл, като използвате разширението mysqli. Предоставете идентификационни данни според вашата конфигурация

index.php

Създайте html форма за регистрация на потребител.

Регистрирайте се Пълно име Имейл Парола

Вече е регистриран. влезте тук

Jquery / Ajax за наличност на потребителски имейл

check_availability.php

На тази страница ще проверим наличността на потребителския имейл. Създайте процедура за магазин с проверка на наличността на име
Код на процедурата за съхранение:

DELIMITER $ CREATE DEFINER=`root`@`localhost` PROCEDURE `checkavailbilty`(IN `email` VARCHAR(255)) NO SQL SELECT EmailId FROM tblregistration WHERE EmailId=email$ DELIMITER ;

Сега създайте процедура за магазин за регистрация на потребител.
Магазин процедура за регистрация на потребител

DELIMITER $ CREATE DEFINER=`root`@`localhost` PROCEDURE `registration`(IN `fname` VARCHAR(200), IN `emailid` VARCHAR(200), IN `password` VARCHAR(255)) БЕЗ SQL вмъкване в tblregistration( Пълно име,имейл адрес,парола) VALUES(fname,имейл адрес,парола)$ DELIMITER ;

След създаване на процедура за съхранение изпълнете процедурата за съхранение.

Ето пълния код, който сме написали за регистрация (index.php):

Регистрация с помощта на функцията на Store Procedure checkAvailability() ( $("#loaderIcon").show(); jQuery.ajax(( url: "check_availability.php", data:"emailid="+$("#email").val (), тип: "POST", success:function(data)( $("#user-availability-status").html(data); $("#loaderIcon").hide(); ), error:function ()() )); ) Регистрация Пълно име Имейл Парола

Вече е регистриран. влезте тук

login.php

Създаване на формуляр за влизане потребителски вход.

Влизам

Не е регистриран? Създай профил

Сега създайте процедура за съхранение за влизане с име login.
Процедура за влизане в магазина:

DELIMITER $ CREATE DEFINER=`root`@`localhost` PROCEDURE `login`(IN `useremail` VARCHAR(255), IN `password` VARCHAR(255)) NO SQL SELECT EmailId,Парола от tblregistration където EmailId=потребителска поща и парола= парола$ DELIMITER ;

Сега изпълнете процедурата за съхранение на вход

Ново в сайта

>

Най - известен