Авторизация
Что такое авторизация? Это однозначное определение пользователя, что бы не путать его с другими и соответственно наделять правами в зависимости от уровня доступа.
Как будет проходить авторизация?
План действия:
1. Пользователь заходит на страницу.
2. Проверяем поступление события от действий пользователя.
2.1 Пришла команда методом POST/GET о том что надо авторизовать пользователя
2.1.1 Проверим пришедшие данные по списку зарегистрированных пользователей.
2.1.2 В случае совпадения с одним из пользователей передадим в сессию уникальный
идентификатор, что бы в дальнейшем скрипт по нему различал авторизованного от не авторизованного.
2.2 Пришла команда разлогинить пользователя
2.2.1 Удалим иидентификатор различия между авторизованным пользователеи и не авторизованным.
3. Скрипт определяет авторизован пользователь или нет
Дальше есть 2 варианта
4. Если пользователь авторизован
4.1 Строим форму с возможностью выйти из системы
5. Если пользователь не авторизован
5.1 Строим форму для ввода логина и пароля
От теории к практике!
создаем файл index.php данного содержимого
Что такое авторизация? Это однозначное определение пользователя, что бы не путать его с другими и соответственно наделять правами в зависимости от уровня доступа.
Как будет проходить авторизация?
План действия:
1. Пользователь заходит на страницу.
2. Проверяем поступление события от действий пользователя.
2.1 Пришла команда методом POST/GET о том что надо авторизовать пользователя
2.1.1 Проверим пришедшие данные по списку зарегистрированных пользователей.
2.1.2 В случае совпадения с одним из пользователей передадим в сессию уникальный
идентификатор, что бы в дальнейшем скрипт по нему различал авторизованного от не авторизованного.
2.2 Пришла команда разлогинить пользователя
2.2.1 Удалим иидентификатор различия между авторизованным пользователеи и не авторизованным.
3. Скрипт определяет авторизован пользователь или нет
Дальше есть 2 варианта
4. Если пользователь авторизован
4.1 Строим форму с возможностью выйти из системы
5. Если пользователь не авторизован
5.1 Строим форму для ввода логина и пароля
От теории к практике!
создаем файл index.php данного содержимого
<?php
session_start();
$demo_password = 'admin';
$demo_login = 'admin';
$action=!empty($_POST['action'])?$_POST['action']:'index';
if ($action=='login'){
$user=$_POST['user'];
$pass=$_POST['pass'];
if ((!empty($user))&&(!empty($pass))){
if (($user==$demo_login)&&($pass==$demo_password)){
$_SESSION['login']['user']=$user;
$_SESSION['login']['id']='123';
$_SESSION['login']['session']=session_id();
$action='index';
}
}
else {$action='index';}
}
if($action=='logout'){
unset($_SESSION['login']);
$action='index';
}
$authorize=false;
if (!empty($_SESSION['login']['session'])&&(!empty($_SESSION['login']['id']))){
$authorize=true;
}
if($action=='index'){
if (!$authorize){
print "
<form method=post>
<input type='hidden' name='action' value='login'>
<label>Пользователь</label><input type='text' name='user'><br>
<label>Пароль</label><input type='text' name='pass'><br>
<input type='submit' value='login'>
</form>
";
}
if($authorize){
print "
<form method=post>
<input type='hidden' name='action' value='logout'>
Пользователь: {$_SESSION['login']['user']}<br>
<input type='submit' value='exit'>
</form>
";
}
}
Теперь рассмотрим детально что за чем делается:
session_start() - при заходе на страницу стартуем сессию, так как в ней будем хранить данные о авторизации
$demo_password = 'admin';
$demo_login = 'admin';
$action=!empty($_POST['action'])?$_POST['action']:'index';
Тут мы для демонстрации создали некие данные для пользователя и пароля, а так же получили переданное пользователем действие, если таковое имеет место быть.
Никогда в реальном проекте не храните данные авторизации в коде и тем более без защиты. Тут используется исключительно демонстрация.
if ($action=='login'){
$user=$_POST['user'];
$pass=$_POST['pass'];
if ((!empty($user))&&(!empty($pass))){
if (($user==$demo_login)&&($pass==$demo_password)){
$_SESSION['login']['user']=$user;
$_SESSION['login']['id']='123';
$_SESSION['login']['session']=session_id();
$action='index';
}
}
else {$action='index';}
}
В данном блоке мы определяем, что от пользователя пришло событие указывающее на то что пользователь передал свои учетные данные и хочет авторизоваться.
После считываем переданное имя пользователя и переданный пароль.
Проверяем что бы они не были пустыми.
После чего в сессии создаем структуру для хранения информации о пользователе
Что бы каждый раз не обращаться в базу имя пользователя будем хранить в сессии
$_SESSION['login']['user']=$user;
Что бы унифицировать пользователя будем хранить его id из базы данных и код сессии который было бы правильно записать в базу данных при авторизации, что бы исключить возможность подмена сессии.
$_SESSION['login']['id']='123';
$_SESSION['login']['session']=session_id();
Когда все действия выполнены то можно переходить к строительству формы
$action='index';
if($action=='logout'){
unset($_SESSION['login']);
$action='index';
}
Если от пользователя пришла команда выхода из системы, то очистим структуру которая отвечает за хранение данных о пользователе и перейдем к строительству формы
$authorize=false;
if (!empty($_SESSION['login']['session'])&&(!empty($_SESSION['login']['id']))){
$authorize=true;
}
Данный блок отвечает за проверку правильности введенных авторизационных данных в сессии.
$authorize=true;
Необходимо выполнять только после того как считали из базы данных записанную туда ранее сессию и сравнили с текущей, это необходимо что бы исключить подмену сессии. Но так как это демонстрация то тут стоит простая заглушка дабы уменьшить количество кода.
if($action=='index'){
if (!$authorize){
Тут у нас строится форма авторизации, что бы пользователь мог ввести имя и пароль. Кроме того передается скрытое поле для команды login.
print "
<form method=post>
<input type='hidden' name='action' value='login'>
<label>Пользователь</label><input type='text' name='user'><br>
<label>Пароль</label><input type='text' name='pass'><br>
<input type='submit' value='login'>
</form>"; }
if($authorize){
Тут строится форма выхода из системы, что бы пользователь мог разлогинится. Так же передается скрытый параметр с командой logout который в скрипте очистит сессию.
print "
<form method=post>
<input type='hidden' name='action' value='logout'>
Пользователь: {$_SESSION['login']['user']}<br>
<input type='submit' value='exit'>
</form>";}
}
Ну вот собственно это и есть самая простая авторизация пользователя.
В этой статье мы на этом остановимся.
Дальше у нас будет на много больше интересного:
Авторизация используя Ajax
Авторизация с хранением данных в базе данныи
И многое другое! Оставайтесь с нами!
Комментариев нет:
Отправить комментарий