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
 Авторизация с хранением данных в базе данныи

И многое другое! Оставайтесь с нами!

Комментариев нет:

Отправить комментарий