Check.php
Проверка авторизации пользователя находится в последнем файле. Сначала проверьте конфигурацию, не отправляются ли куки с номером ошибки в login.php. базу данных и извлеките хэш.
Index.php, обработка запросов
Все запросы будут отправляться через этот файл. Основы маршрутизации и управления доступом к страницам
index.php
Php login system with pdo connection.
Демонстрационный скрипт для скачивания
Таблица пользователей.
Вся информация о регистрации пользователя находится в таблице пользователей.
CREATE TABLE `users` (
`uid` int NOT NULL PRIMARY KEYAUTO_INCREMENT ,
`username` varchar(25) NOT NULL UNIQUE,
`password` varchar(200) NOT NULL ,
`email` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
`profile_pic` varchar(200) NOT NULL,
);
В конфигурационном файле php.ini включите расширение PDO PHP.
config.php
Database connection configuration file, here you have to modify username, password and database details. If you are using other database modify PDO() driver connection value.
PostgreSQL PDO connection
Enable PDO_PGSQL extension and use pgsql:host=$dbhost;port=5432;dbname=$dbname;$dbuser, $dbpass
HTML Login Form
Contains simple HTML code.
<div id=”login“>
<h3>Login</h3>
<form method=”post” action=”” name=”login”>
<label>Username or Email</label>
<input type=”text” name=”usernameEmail” autocomplete=”off” />
<label>Password</label>
<input type=”password” name=”password” autocomplete=”off”/>
<div class=”errorMsg”><?phpecho$errorMsgLogin;?></div>
<input type=”submit” class=”button” name=”loginSubmit” value=”Login”>
</form>
</div>
HTML Signup Code
User registration page.
<div id=”signup“>
<h3>Registration</h3>
<form method=”post” action=”” name=”signup”>
<label>Name</label>
<input type=”text” name=”nameReg” autocomplete=”off” />
<label>Email</label>
<input type=”text” name=”emailReg” autocomplete=”off” />
<label>Username</label>
<input type=”text” name=”usernameReg” autocomplete=”off” />
<label>Password</label>
<input type=”password” name=”passwordReg” autocomplete=”off”/>
<div class=”errorMsg”><?php echo $errorMsgReg; ?></div>
<input type=”submit” class=”button” name=”signupSubmit” value=”Signup”>
</form>
</div>
CSS Code
#login,#signup{
width: 300px; border: 1px solid #d6d7da;
padding: 0px 15px 15px 15px;
border-radius: 5px;font-family: arial;
line-height: 16px;color: #333333; font-size: 14px;
background: #ffffff;rgba(200,200,200,0.7) 0 4px 10px -1px
}
#login{float:left;}
#signup{float:right;}
h3{color:#365D98}
formlabel{font-weight: bold;}
form label, forminput{display: block;margin-bottom: 5px;width: 90%}
form input{
border: solid 1px #666666;padding: 10px;
border: solid 1px #BDC7D8; margin-bottom: 20px
}
.button {
background-color: #5fcf80 ;
border-color: #3ac162;
font-weight: bold;
padding: 12px 15px;
max-width: 100px;
color: #ffffff;
}
.errorMsg{color: #cc0000;margin-bottom: 10px}
userClass.php
This class contains there methods userLogin, userRegistion and userDetails.
class
userClass
{
/* User Login */
publicfunctionuserLogin
($usernameEmail,$password)
{
try{
$db =
getDB
();
$hash_password=
hash
(‘
sha256
Пароль’);
// Защита паролем
$stmt = $db->
prepare
(“
SELECT uid FROM users WHERE (username=:usernameEmail or email=:usernameEmail) AND password=:hash_password
“);
$stmt->
bindParam
(“usernameEmail”, $usernameEmail,
Боб :: Param_str
) ;
$stmt->
bindParam
(“hash_password”, $hash_password,
Боб :: Param_str
) ;
$stmt->
execute
();
$count=$stmt->
rowCount
();
$data=$stmt->
fetch
(
Боб :: fetch_obj
);
$db = null;
if($count)
{
$
_SESSION
[‘uid’]=$data
->
uid;
// Storing user session value
return
true;
}
else
{
Вернуть ложь
;
}
}
catch
(
PDOException
$e) {
echo
‘{“error”:{“text”:’. $e->
getMessage
() .’}}’;
}
}
/* User Registration */
publicfunctionuserRegistration($username,$password,$email,$name)
{
try{
$db = getDB();
$st = $db->prepare(“SELECT uid FROM users WHERE username=:username OR email=:email“);
$st->bindParam(“username”, $username,PDO::PARAM_STR);
$st->bindParam(“email”, $email,PDO::PARAM_STR);
$st->execute();
$count=$st->rowCount();
if($count<1)
{
$stmt = $db->prepare(“INSERT INTO users(username,password,email,name) VALUES (:username,:hash_password,:email,:name)“);
$stmt->bindParam(“username”, $username,PDO::PARAM_STR) ;
$hash_password= hash(‘sha256‘, $password); //Password encryption
$stmt->bindParam(“hash_password”, $hash_password,PDO::PARAM_STR) ;
$stmt->bindParam(“email”, $email,PDO::PARAM_STR) ;
$stmt->bindParam(“name”, $name,PDO::PARAM_STR) ;
$stmt->execute();
$uid=$db->lastInsertId(); // Last inserted row id
$db = null;
$_SESSION[‘uid’]=$uid;
return true;
}
else
{
$db = null;
return false;
}
}
catch(PDOException $e) {
echo ‘{“error”:{“text”:’. $e->getMessage() .’}}’;
}
}
/* User Details */
publicfunctionuserDetails($uid)
{
try{
$db = getDB();
$stmt = $db->prepare(“SELECT email,username,name FROM users WHERE uid=:uid”);
$stmt->bindParam(“uid”, $uid,PDO::PARAM_INT);
$stmt->execute();
$data = $stmt->fetch(PDO::FETCH_OBJ); //User data
return $data;
}
catch(PDOException $e) {
echo ‘{“error”:{“text”:’. $e->getMessage() .’}}’;
}
}
}
?>
index.php
Contains PHP and HTML code, works base on user form submit.
include
(“
config.php
“);
include
(‘
class/userClass.php
‘);
1 доллар;$ userclass;
newuserClass
();
$errorMsgReg=”;
$errorMsgLogin=”;
/* Login Form */
if (!empty($_POST[‘loginSubmit‘]))
{
$usernameEmail=$_POST[‘usernameEmail‘];
$password=$_POST[‘password‘];
if(strlen(trim($usernameEmail))>1 && strlen(trim($password))>1 )
{
$uid=$userClass->userLogin($usernameEmail,$password);
if($uid)
{
$url=BASE_URL.’home.php‘;
header(“Location: $url“); // Page redirecting to home.php
}
else
{
$errorMsgLogin=”Please check login details.“;
}
}
}
/* Signup Form */
if (!empty($_POST[‘signupSubmit‘]))
{
$username=$_POST[‘usernameReg‘];
$email=$_POST[‘emailReg‘];
$password=$_POST[‘passwordReg‘];
$name=$_POST[‘nameReg‘];
/* Regular expression check */
$username_check = preg_match(‘~^[A-Za-z0-9_]{3,20}$~i‘, $username);
$email_check = preg_match(‘~^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-] .([a-zA-Z]{2,4})$~i‘, $email);
$password_check = preg_match(‘~^[[email protected]#$%^&*()_]{6,20}$~i‘, $password);
if($username_check && $email_check && $password_check && strlen(trim($name))>0)
{
$uid=$userClass->userRegistration($username,$password,$email,$name);
if($uid)
{
$url=BASE_URL.’home.php‘;
header(“Location: $url“); // Page redirecting to home.php
}
else
{
$errorMsgReg=”Username or Email already exists.“;
}
}
}
?>
//HTML Code
….Login Form HTML Code….
….Signup Form HTML Code…
Для улучшения пользовательского опыта необходимо включить валидацию JavaScript.
session.php
This will validate and store user session value.
<?php
if(!empty($_SESSION[‘uid’]))
{
$session_uid=$_SESSION[‘uid’];
include(‘class/userClass.php‘);
$userClass = newuserClass();
}
if(empty($session_uid))
{
$url=BASE_URL.’index.php‘;
header(“Location: $url“);
}
?>
home.php
User welcome page, display user details base on user session value.
logout.php
This code will clear user session values.
<?php
include(‘config.php‘);
$session_uid=”;
$_SESSION[‘uid’]=”;
if(empty($session_uid) &&empty($_SESSION[‘uid’]))
{
$url=BASE_URL.’index.php‘;
header(“Location: $url“);
//echo “<script>window.location=’$url'</script>”;
}
?>
Php авторизация
Следующий код также прост для использования.
Php регистрация
Этот код служит в качестве общей иллюстрации. Следует отметить, что код необходимо будет корректировать для каждого сайта. Поскольку я использую фреймворк Codeigniter, функции, которые я представляю, специфичны и легко заменяются на другие, аналогичные по характеру.
Архив обновлен 24.02.2022г.
Внимание:
Если вы используете данный скрипт на локальном сервере типа
DENWER XAMPP
, то не
стоит ждать писем на свой почтовый ящик. Письма лежат в заглушке
sendmail
. В
Denwer
вы их можете
найти по пути
Z:tmp!sendmail
открыть данные файлы вы сможете в любом почтовом клиенте.
Все уроки курса:
Количество уроков: 2
Продолжительность курса: 03:30:10
Выход
Вы можете удалить файлы cookie любым удобным для вас способом, например, с помощью:
1 | <form action=»» method=»post»><input type=’submit’ name=’exit’ value=’Выйти’/></form> |
Самое главное, файлы должны быть в кодировке UTF8 и без BOM! Наслаждайтесь!
Теги: Cookie, MD5, MySQL, PHP, Авторизация
Далее создаем таблицу
bez_role
, где напишим названия наших ролей:
- Администратор
О модератор
О, пользователь
Единая точка входа
Когда все запросы проходят через один главный сценарий, это называется единой регистрацией. Хотя это может показаться неудобным, на самом деле это не так.
Например, вы можете поместить куда-нибудь файл для проверки авторизации и больше никогда не заглядывать в него. Вы можете запретить любому пользователю доступ к определенным областям сайта. Если кто-то знает адрес, он не сможет получить доступ к скрытой странице. И т.д.
Давайте разберем эту тему в другой статье, а сначала заложим основу для нашего сайта.
Создайте файл “.htaccess” в корне сайта и поместите в него правила для перенаправления сайта.
RewriteEngine On
RewriteCond %{REQUEST_URI} !(png|gif|jpg|jpeg|css|js)$
RewriteRule .* index.php [L,QSA]
Этот файл продемонстрирует хостеру, что мы не можем удовлетворить запросы с изображениями и JS-скриптами.
И так, создадим таблицы в нашей базе данных. у меня это таблицы:
- Bez_reg
- Bez_role
- Bez_content
Как обезопасить свой сайт
Элементы безопасности вашего сайта важны.
- Самый простой способ создать сайт с одной точкой входа. Об этом мы кратко поговорим ниже.
- Просмотрите все запросы. Это можно сделать вручную или с помощью подготовленных запросов.
- Ограничить данные, которые может ввести пользователь.
Как сделать регистрацию и авторизацию пользователей на сайте
Вы здесь:
Главная — PHP — PHP Основы — Как сделать регистрацию и авторизацию пользователей на сайте
Недавно один из моих посетителей попросил меня написать статью о регистрации и авторизации пользователей. Да, я выполняю его просьбу.
Я собираюсь описать предпочтительный для меня метод регистрации и авторизации пользователей.
Первым шагом является выбор места хранения пользовательских данных. В обычном текстовом файле, XML-файле или базе данных можно хранить только текст. Хотя первые два варианта рискованны, я не рекомендую их использовать.
После осмотра вы отправитесь к месту хранения. Давайте сразу перейдем к алгоритму авторизации:
- Создайте форму регистрации в HTML.
- Получите данные из формы в обработчике сценария.
- Проверьте полученные данные и, если они неверны, перенаправьте их обратно в регистрационную форму.
- Если данные верны, сохраните их в базе данных.
Вот и вся процедура добавления пользователя на сайт. После регистрации информация пользователя сохраняется на сайте.
Затем пользователь должен зарегистрироваться на сайте, но прежде чем это сделать, посмотрите пароль в регистрационной форме. Я настоятельно не рекомендую хранить пароли в виде обычного текста (например, “123456”).
Теперь наступает время разрешения. Первое, что вам нужно знать, это то, что данные авторизации должны где-то храниться. Эти данные можно хранить в cookies самым простым способом. Алгоритм следующий:
Подключение к mysql в pdo
bd.php
Работа с формами через ajax
Для обработки Ajax-запросов создайте класс JAXRequest. Поместите его в файл classes/AjaxRequest.class php.
Самые распространённые роли это:
- Администратор
- Модератор
- Пользователь
- Гость
Создание базы данных
В совершенно новой базе данных, которую мы создадим и назовем testdb. Выполните запрос с привилегированным доступом!
-- Создание базы данных testdb с кодировкой utf8
CREATE DATABASE testdb CHARACTER SET utf8 COLLATE utf8_general_ci;
Добавим другого пользователя, testdb, чтобы мы могли взаимодействовать с базой.
Структура таблицы: bez_reg
--
-- Структура таблицы `bez_reg`
--
CREATE TABLE IF NOT EXISTS `bez_reg` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(200) NOT NULL,
`pass` varchar(32) NOT NULL,
`salt` varchar(32) NOT NULL,
`active_hex` varchar(32) NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Структура файлов и директорий
Мы создадим папку под названием “hp” в каталоге “php-auth” для нашего проекта. Мы добавили следующие файлы и папки:
Источники включены в полный архив (обновленная версия).
Урок по созданию регистрации и авторизации на php
Возможно, такой сценарий уже произошел с вами. Вы можете редактировать содержание и макет сайта, например, с помощью административной панели.
Вы узнаете, как правильно реализовать регистрацию или авторизацию пользователей после прохождения курса по использованию PHP для создания регистрации и авторизации на сайте.
Мы узнаем, как построить систему генерации кода для активации учетной записи пользователя, а также как построить процесс регистрации пользователя на сайте. Темы разработки системы авторизации пользователей и восстановления забытого пароля будут рассмотрены во втором уроке.
После прохождения курса по использованию PHP для создания регистрации и авторизации на сайте вы получите готовую систему для управления пользователями сайта.
Выполнив это, вы поймете функции и обоснование каждого элемента этой системы. Вы узнаете, как построить комплексную систему авторизации, хранить информацию об авторизации в cookies браузера и быстро сбросить забытый пароль пользователя.
В данном видеокурсе от компании WebForMySelf, мы рассмотрим способ создания скрипта регистрации на сайте, с помощью PHP, дополнительно рассмотрим вопрос авторизации пользователей на сайте.
Файл reg_form.html
Так как регистрация пользователей у нас готова, самое время написать авторизацию. Создадим форму для авторизации
пользователей, далее напишем обработчик формы авторизации и на последок сделаем скрипт show.php который
будет показывать нам авторизированны мы в системе или нет.
Формат json-ответа
На стороне клиента мы должны отобразить результат операции в формате, доступном для чтения человеком. Для этого мы предоставляем ответ в формате JSON в следующем формате.
{
"status": "статус операции", // err или ok
"code": "имя поля с ошибкой",
"message": "сообщение об ошибке",
"data": "другие произвольные данные"
}
Создайте файл js/ajax-form.jsp, который будет асинхронно запрашивать сервер и перехватывать события отправки всех форм с классом ajax. Исходный код Ajax-form.js
Для запуска скрипта вам потребуется juery версии 2.0.3 (они находятся в архиве с исходными текстами).
Методы объекта script.ajaxForm,callbacks обрабатывают ответы. Примером обработки ответов является авторизация на сайте.
login: function ($form, data) {
if (data.status === 'ok') {
// если авторизация успешна, делаем редирект на
// нужную страницу
if (data.data && data.data.redirect) {
window.location.href = data.data.redirect;
}
}
}
Эти обратные вызовы происходят только во время проверки ответа. Функция script.ajaxFormValidate проверяет, содержит ли ответ поле с ошибкой.
Обязательно напишите о любых ошибках, которые вы найдете в коде или тексте статьи.
Обновление: исправлена ошибка хэширования пароля, и режим “Запомнить меня” работает. Мы благодарны пользователю santas156 за обнаружение ошибок.
Экранизация запросов
Все поле должно быть экранировано, чтобы злоумышленник не смог встроить свой запрос к нашей базе и любому полю. Этого можно добиться несколькими способами.
- Ручная проверка данных
- С помощью подготовленных запросов.
Ручная проверка подразумевает, что все данные будут фильтроваться через специальные функции, исключающие специальные символы, а также из блоков “если else”.