Вы находитесь на странице: 1из 182

Раздел 5:

Хранение состояния и
аутентификация
План вебинара
План вебинара

– Проблема хранения состояния в вебе


План вебинара

– Проблема хранения состояния в вебе


– Cookies (куки)
План вебинара

– Проблема хранения состояния в вебе


– Cookies (куки)
– Сессии
План вебинара

– Проблема хранения состояния в вебе


– Cookies (куки)
– Сессии
– Что такое аутентификация
План вебинара

– Проблема хранения состояния в вебе


– Cookies (куки)
– Сессии
– Что такое аутентификация
– Правильное хранение паролей
План вебинара

– Проблема хранения состояния в вебе


– Cookies (куки)
– Сессии
– Что такое аутентификация
– Правильное хранение паролей
– Организуем вход на сайт
Хранение состояния
сохранение информации о текущем пользователе
между разными запросами
Вспоминаем как работает HTTP
Вспоминаем как работает HTTP
Пользователь вводит адрес сайта в 

своем браузере
1
Вспоминаем как работает HTTP
Пользователь вводит адрес сайта в 

своем браузере
1

Браузер отсылает HTTP запрос на сервер


2
GET / HTTP/1.1
Host: giftube.academy
Вспоминаем как работает HTTP
Пользователь вводит адрес сайта в 

своем браузере
1

Браузер отсылает HTTP запрос на сервер


2
GET / HTTP/1.1
Host: giftube.academy

Браузер получает от сервера ответ и


показывает страницу
3
HTTP/1.1 200 OK
Content-Length: 7890
Для чего хранить состояние

– Отслеживание активности
Счетчики. Узнать сколько раз пользователь заходил на 

ваш сайт и какие страницы смотрел

– Кастомизация
Сохранение для пользователя выбранного языка, 

страны, других настроек

– Идентификация
Дать доступ к закрытым разделам сайта 

зарегистрированным пользователям
Добавление в избранное
Добавление в избранное
Добавление в избранное

На странице просмотра добавить 



гифку в избранное
Добавление в избранное

На странице просмотра добавить 
 Видеть все избранные гифки 



гифку в избранное на отдельной странице
Cookies
небольшая порция текстовой информации, которую
сервер передает браузеру.

Браузер будет хранить эту информацию и


передавать её обратно серверу с каждым запросом
Свойства cookies
Свойства cookies

– Поддерживаются всеми браузерами


Свойства cookies

– Поддерживаются всеми браузерами


– Кусок текстовой информации
Свойства cookies

– Поддерживаются всеми браузерами


– Кусок текстовой информации
– Передаются в заголовках при каждом запросе
Свойства cookies

– Поддерживаются всеми браузерами


– Кусок текстовой информации
– Передаются в заголовках при каждом запросе
– Браузер сам определяет какому сайту какие куки отправлять
Свойства cookies

– Поддерживаются всеми браузерами


– Кусок текстовой информации
– Передаются в заголовках при каждом запросе
– Браузер сам определяет какому сайту какие куки отправлять
– Имеют «срок годности»
Первое посещение - установка
Первое посещение - установка

1 Браузер отсылает HTTP запрос на сервер


Первое посещение - установка

1 Браузер отсылает HTTP запрос на сервер

Чтобы «запомнить» пользователя, сервер отсылает


2 специальный заголовок ответа «cookies» с данными
Первое посещение - установка

1 Браузер отсылает HTTP запрос на сервер

Чтобы «запомнить» пользователя, сервер отсылает


2 специальный заголовок ответа «cookies» с данными

3 Браузер сохраняет cookies в своем хранилище


Следующие посещения - получение
Следующие посещения - получение

Браузер отсылает HTTP запрос вместе с куками на


1 сервер
Следующие посещения - получение

Браузер отсылает HTTP запрос вместе с куками на


1 сервер

Сервер узнает пользователя и возвращает ему


2 релевантную информацию
Как сервер отправляет cookie
Как сервер отправляет cookie

Добавить в ответ новый


заголовок с данными куки
Как сервер отправляет cookie

Добавить в ответ новый


заголовок с данными куки

gifs_fav = [15, 24, 56]


Как сервер отправляет cookie

Добавить в ответ новый


заголовок с данными куки

gifs_fav = [15, 24, 56]


Отправить клиенту контент
страницы вместе с заголовками
Как сервер отправляет cookie

Добавить в ответ новый


заголовок с данными куки

gifs_fav = [15, 24, 56]


Отправить клиенту контент
страницы вместе с заголовками

Извлечь куку из заголовков и


сохранить её у себя
Как сервер получает cookie
Как сервер получает cookie

Браузер находит у себя все


сохраненные для этого сайта куки
Как сервер получает cookie

Браузер находит у себя все gifs_fav = [15, 24, 56]


сохраненные для этого сайта куки
Как сервер получает cookie

Браузер находит у себя все gifs_fav = [15, 24, 56]


сохраненные для этого сайта куки

Host: giftube.academy
User-Agent: Chrome 60 Браузер добавляет куку к
Cookie: gifs_fav=15,24,56 остальным заголовкам запроса
Accept: text/html
Как сервер получает cookie

Браузер находит у себя все gifs_fav = [15, 24, 56]


сохраненные для этого сайта куки

Host: giftube.academy
User-Agent: Chrome 60 Браузер добавляет куку к
Cookie: gifs_fav=15,24,56 остальным заголовкам запроса
Accept: text/html

PHP-сценарий получает куку из


заголовков запроса
Из чего состоят cookies

Заголовок ответа для установки cookie

Set-Cookie: 

NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME;
Из чего состоят cookies

Заголовок ответа для установки cookie

Set-Cookie: 

NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME;

Имя куки. Строка без спецсимволов.



Пример: gifs_fav
Из чего состоят cookies

Заголовок ответа для установки cookie

Set-Cookie: 

NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME;

Полезная информация. Значение куки



Пример: 15,24,56
Из чего состоят cookies

Заголовок ответа для установки cookie

Set-Cookie: 

NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME;

Время жизни куки. При наступлении этой


даты кука уничтожится

Пример: Mon, 25-Jan-2027 10:03:02 GMT
Из чего состоят cookies

Заголовок ответа для установки cookie

Set-Cookie: 

NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME;

Путь на сайте, для которого будет доступна кука.


Для работы на всем сайте указывается "слеш"

Пример: /
Из чего состоят cookies

Заголовок ответа для установки cookie

Set-Cookie: 

NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME;

Домен, для которого устанавливается кука.



Пример: .htmlacademy.ru
Из чего состоят cookies

Заголовок запроса для передачи cookie

Cookie: NAME1=STRING1; NAME2=STRING2 ...


Из чего состоят cookies

Заголовок запроса для передачи cookie

Cookie: NAME1=STRING1; NAME2=STRING2 ...

• В одном заголовке передаются все куки для этого сайта

• Строки вида «ключ-значение»

• Разделяются точкой с запятой


Скриншот из браузера
Где хранятся cookies
Все куки хранятся в отдельном файле, который находится

в папке с конфигурацией браузера
Когда удаляются cookies?
Куки удаляются в двух случаях:
• истёк их срок жизни
• очистка истории браузера
Когда удаляются cookies?
Куки удаляются в двух случаях:
• истёк их срок жизни
• очистка истории браузера
Работа с cookies в PHP
Написать PHP-сценарий, который будет считать 

количество посещений пользователем страницы 

и выводить этот счетчик на экран.

Для хранения счетчика между посещениями 



страницы будет использовать cookies
Работа с cookies в PHP
Нам понадобятся следующие функции:
Работа с cookies в PHP
Нам понадобятся следующие функции:

• strtotime($date)

переводит дату из человеческого описания в формат для cookies
Работа с cookies в PHP
Нам понадобятся следующие функции:

• strtotime($date)

переводит дату из человеческого описания в формат для cookies

• setcookie($name, $value, $expire, $path)


устанавливает куку и все параметры, отсылает заголовок
Работа с cookies в PHP
Нам понадобятся следующие функции:

• strtotime($date)

переводит дату из человеческого описания в формат для cookies

• setcookie($name, $value, $expire, $path)


устанавливает куку и все параметры, отсылает заголовок
Работа с cookies в PHP
<?php

$name   = "visitcount";
$value  = 1;

$expire = "Mon, 25-Jan-2027 10:00:00 GMT";

$path   = "/";


setcookie($name, $value, $expire, $path);
Работа с cookies в PHP
<?php

$name   = "visitcount"; уникальное имя куки
$value  = 1;

$expire = "Mon, 25-Jan-2027 10:00:00 GMT";

$path   = "/";


setcookie($name, $value, $expire, $path);
Работа с cookies в PHP
<?php

$name   = "visitcount"; уникальное имя куки
$value  = 1;
 значение куки
$expire = "Mon, 25-Jan-2027 10:00:00 GMT";

$path   = "/";


setcookie($name, $value, $expire, $path);
Работа с cookies в PHP
<?php

$name   = "visitcount"; уникальное имя куки
$value  = 1;
 значение куки
$expire = "Mon, 25-Jan-2027 10:00:00 GMT";
 дата удаления
$path   = "/";


setcookie($name, $value, $expire, $path);
Работа с cookies в PHP
<?php

$name   = "visitcount"; уникальное имя куки
$value  = 1;
 значение куки
$expire = "Mon, 25-Jan-2027 10:00:00 GMT";
 дата удаления
$path   = "/";
 устанавливаем на весь сайт

setcookie($name, $value, $expire, $path);
Работа с cookies в PHP
Чтение куки

<?php

if (isset($_COOKIE['visitcount'])) {

  print $_COOKIE['visitcount'];

}
Работа с cookies в PHP
Чтение куки

<?php

if (isset($_COOKIE['visitcount'])) {

  print $_COOKIE['visitcount'];

}

Все куки PHP автоматически помещает 



в специальный глобальный массив
Как удалить cookie
Очистить массив $_COOKIES и послать заголовок, который 

удалит куку из браузера

<?php

if (isset($_COOKIE['visit_count'])) {

   unset($_COOKIE['visit_count']);
   

   setcookie('key', '', time() - 3600, '/');

}
Как удалить cookie
Очистить массив $_COOKIES и послать заголовок, который 

удалит куку из браузера

<?php

if (isset($_COOKIE['visit_count'])) {

   unset($_COOKIE['visit_count']);
   

   setcookie('key', '', time() - 3600, '/');

}

устанавливаем дату из прошлого


Безопасность при работе с cookies
В куках может содержаться конфиденциальная информация, 

а значит они могут стать мишенью злоумышленников

bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, 



string $domain = "" [, bool $secure = FALSE [, bool $httponly = FALSE ]]]]]] )
Безопасность при работе с cookies
В куках может содержаться конфиденциальная информация, 

а значит они могут стать мишенью злоумышленников

bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, 



string $domain = "" [, bool $secure = FALSE [, bool $httponly = FALSE ]]]]]] )

Как повысить безопасность:


• secure
передача кук только по протоколу https
• httponly
запрет на использование из JavaScript (XSS уязвимость)
Достоинства и недостатки cookies

Достоинства

• Самый универсальный и стандартный 



способ хранения состояния
• Поддерживается всеми браузерами
• Отличная поддержка в PHP
Достоинства и недостатки cookies

Достоинства Недостатки

• Самый универсальный и стандартный 
 • Ограничения по формату и 



способ хранения состояния объему данных
• Поддерживается всеми браузерами • Зависят от заголовков
• Отличная поддержка в PHP • Проблемы с безопасностью
Сессии
способ хранения данных о сеансе пользователя на
стороне сервера
Что такое сессии
Сессии – это не стандарт и не часть протокола, а 

понятие из языка PHP, надстройка над обычными cookies
Что такое сессии
Сессии – это не стандарт и не часть протокола, а 

понятие из языка PHP, надстройка над обычными cookies

Преимущества:
• абстракция над cookies
• могут хранить любые объемы и типы данных
Что такое сессии
Сессии – это не стандарт и не часть протокола, а 

понятие из языка PHP, надстройка над обычными cookies

Преимущества:
• абстракция над cookies
• могут хранить любые объемы и типы данных
Особенности:
• живут только внутри одного сеанса
• хранят данные в файлах (по умолчанию)
• требуют для своей работы cookies
Как работают сессии
Как работают сессии
PHP генерирует случайный идентификатор сессии на
1 основе данных пользователя
Как работают сессии
PHP генерирует случайный идентификатор сессии на
1 основе данных пользователя

PHP создает специальный файл с этим именем, где


2 будет хранить данные сессии
Как работают сессии
PHP генерирует случайный идентификатор сессии на
1 основе данных пользователя

PHP создает специальный файл с этим именем, где


2 будет хранить данные сессии

PHP создает специальную куку с именем PHPSESSID,


3 куда записывает идентификатор сессии
Как работают сессии
PHP генерирует случайный идентификатор сессии на
1 основе данных пользователя

PHP создает специальный файл с этим именем, где


2 будет хранить данные сессии

PHP создает специальную куку с именем PHPSESSID,


3 куда записывает идентификатор сессии

При следующих запросах проверяется эта кука, и по


4 значению из неё запрашивается информация из файла
Сессионный cookie
Сессионный cookie

Сессионная кука – как номерок в гардеробе: 



не содержит предмет, но позволяет его получить
Где хранятся сессии
Сессии хранятся в виде файлов в ФС сервера.

Один файл - одна сессия конкретного пользователя


Где хранятся сессии
Сессии хранятся в виде файлов в ФС сервера.

Один файл - одна сессия конкретного пользователя

root@localhost:/var/lib/php/sessions# ls –la

-rw------- 1 0   Apr 28 14:22 sess_03otfci957os118v6eppfeuvc4


-rw------- 1 0   Apr 28 14:16 sess_8nfdaan5ueecme63bfhuet0f06
-rw------- 1 967 Apr 28 14:43 sess_95vttihdopv5u1kj1cd66eqfu3
-rw------- 1 967 Apr 28 14:44 sess_h88moinp3qpk8tdve2embccps3
Сколько существует сессия
• Время жизни сессии – 24 минуты
• Сессия уничтожается при закрытии браузера
Сколько существует сессия
• Время жизни сессии – 24 минуты
• Сессия уничтожается при закрытии браузера

Увеличение времени жизни сессии

<?php

ini_set('session.cookie_lifetime', 86400);

ini_set('session.gc_maxlifetime', 86400);
Перерыв на 10 минут
Сравнение сессий и cookies

Куки Сессии

Тип хранимых данных только простые строки строки, массивы, числа, объекты

Максимальный размер ~ 4 Кб не ограничен

Место хранения в браузере на сервере

Время жизни до 20 лет до окончания сеанса

установка и удаление через не отличается от работы с


Удобство использования
спец. функции обычными переменными

Доступ с клиента возможен отсутствует


Где использовать куки и сессии

Cookies

• хранение настроек сайта


• отслеживание посещаемости
• хранение небольших объемов 

данных
Где использовать куки и сессии

Cookies Сессии

• хранение настроек сайта • сохранять ключ капчи


• отслеживание посещаемости • хранение данных пользователя
• хранение небольших объемов 
 • хранение любых данных 

данных в рамках сеанса
Практика работы с сессиями

<?php

session_start();


if (isset($_SESSION['username'])) {

   print($_SESSION['username']);

}


$_SESSION['username'] = "Вася";
Практика работы с сессиями
Обязательно при использовании сессий

<?php

session_start();


if (isset($_SESSION['username'])) {

   print($_SESSION['username']);

}


$_SESSION['username'] = "Вася";
Практика работы с сессиями
Обязательно при использовании сессий

<?php

session_start();


if (isset($_SESSION['username'])) {

   print($_SESSION['username']);

}

чтение значения из сессии

$_SESSION['username'] = "Вася";
Практика работы с сессиями
Обязательно при использовании сессий

<?php

session_start();


if (isset($_SESSION['username'])) {

   print($_SESSION['username']);

}

чтение значения из сессии

$_SESSION['username'] = "Вася";

запись значения в сессию


Как удалить сессию
Чтобы удалить все данные и закрыть сессию, просто 

обнулите массив $_SESSION.

При окончании работы скрипта PHP автоматически 



удалит все данные сессии на сервере.
Как удалить сессию
Чтобы удалить все данные и закрыть сессию, просто 

обнулите массив $_SESSION.

При окончании работы скрипта PHP автоматически 



удалит все данные сессии на сервере.

$_SESSION = [];
Аутентификация
процедура проверки логина и пароля пользователя

Происходит на сайте путем сопоставления


полученного от пользователя логина и пароля с
сохраненными в базе данных
Как делить пользователей
Сайт может предоставлять залогиненным пользователям 

дополнительные возможности
Как делить пользователей
Сайт может предоставлять залогиненным пользователям 

дополнительные возможности

Анонимный

1. Смотреть гифки
Как делить пользователей
Сайт может предоставлять залогиненным пользователям 

дополнительные возможности

Анонимный С аккаунтом

1. Смотреть гифки 1. Смотреть гифки


2. Добавлять гифки
3. Оставлять комментарии
4. Лайкать
5. Добавлять в избранное
Закрытая часть сайта

Главная

Добавление Просмотр
Gif Tube
Избранное Регистрация

Категория
Закрытая часть сайта

Главная

Добавление Просмотр
Gif Tube
Избранное Регистрация

Категория
Закрытая часть сайта

Главная

Добавление Просмотр
Gif Tube
Избранное Регистрация

Категория
Где используется аутентификация
Где используется аутентификация

– при логине в свой аккаунт в соц. сети


Где используется аутентификация

– при логине в свой аккаунт в соц. сети


– в интернет-банке (как правило, добавляется смс код)
Где используется аутентификация

– при логине в свой аккаунт в соц. сети


– в интернет-банке (как правило, добавляется смс код)
– в интернет-магазине для доступа к своим заказам
Где используется аутентификация

– при логине в свой аккаунт в соц. сети


– в интернет-банке (как правило, добавляется смс код)
– в интернет-магазине для доступа к своим заказам
– …везде, где нужно предоставить доступ к 

конфиденциальной информации
Как работает аутентификация
Как работает аутентификация
Пусти меня в мой Представься,
профиль незнакомец!
Как работает аутентификация
Пусти меня в мой Представься,
профиль незнакомец!

Я - ivanguy97 Чем докажешь?


Как работает аутентификация
Пусти меня в мой Представься,
профиль незнакомец!

Я - ivanguy97 Чем докажешь?

Мой пароль - Привет, ivanguy97.


lovehate97 Заходи!
Аутентификация и авторизация
Аутентификация и авторизация
Аутентификация это…

проверка подлинности предоставленного пользователем 



идентификатора (пара логин-пароль)
Аутентификация и авторизация
Аутентификация это…

проверка подлинности предоставленного пользователем 



идентификатора (пара логин-пароль)

Авторизация это…

процесс проверки и предоставления прав пользователю на 



выполнение определённого действия
Регистрация на сайте
создание аккаунта - это заполнение формы, где
пользователь указывает свои идентификаторы:
логин или email, а также способ подтверждения -
пароль
Обязательные поля регистрации

Логин igor89
Обязательные поля регистрации

Логин igor89

Логин – это имя пользователя на сайте. 



Логин должен быть уникальным.
Обязательные поля регистрации

Логин igor89

Логин – это имя пользователя на сайте. 



Логин должен быть уникальным.

Пароль ********
Обязательные поля регистрации

Логин igor89

Логин – это имя пользователя на сайте. 



Логин должен быть уникальным.

Пароль ********

Пароль – это секретная комбинация, известная только


пользователю. Пароль можно генерировать за пользователя
и отправлять его письмом.

Обязательные поля регистрации

Логин igor89

Логин – это имя пользователя на сайте. 



Логин должен быть уникальным.

Пароль ********

Пароль – это секретная комбинация, известная только


пользователю. Пароль можно генерировать за пользователя
и отправлять его письмом.


E-mail igorek_89@rambler.ru
Обязательные поля регистрации

Логин igor89

Логин – это имя пользователя на сайте. 



Логин должен быть уникальным.

Пароль ********

Пароль – это секретная комбинация, известная только


пользователю. Пароль можно генерировать за пользователя
и отправлять его письмом.


E-mail igorek_89@rambler.ru

Адрес электронной почты пользователя тоже должен быть


уникальным. Он понадобится для восстановления пароля.

Пароль от аккаунта
секретная фраза - способ пользователю доказать,
что он тот кем он представляется
Правильное хранение паролей
Логины и пароли пользователей хранятся на сервере 

и используются для аутентификации.
Правильное хранение паролей
Логины и пароли пользователей хранятся на сервере 

и используются для аутентификации.

Пароли нельзя хранить в открытом виде, потому что при 



краже информации из БД данные всех пользователей 

становятся скомпрометированными.
Правильное хранение паролей
Логины и пароли пользователей хранятся на сервере 

и используются для аутентификации.

Пароли нельзя хранить в открытом виде, потому что при 



краже информации из БД данные всех пользователей 

становятся скомпрометированными.

Вместо паролей следует хранить их отпечатки - хэши.


Что такое отпечаток пароля
Отпечаток (хэш) – это результат работы функции хэширования, 

которая вернёт для любого значения строку фиксированной длины.
Что такое отпечаток пароля
Отпечаток (хэш) – это результат работы функции хэширования, 

которая вернёт для любого значения строку фиксированной длины.

Провести обратную операцию (получить из отпечатка оригинальную 



строку) невозможно.
Что такое отпечаток пароля

«гладиолус»
Что такое отпечаток пароля

«гладиолус»

Хэширующая функция md5


Что такое отпечаток пароля

«гладиолус» «b328e34e4484a2f9fc194388ebdc5790»

Хэширующая функция md5


Хранение и проверка паролей
Хранение и проверка паролей

1 Получить хэш от пароля пользователя и сохранить его


Хранение и проверка паролей

1 Получить хэш от пароля пользователя и сохранить его

2 При аутентификации запросить пароль


Хранение и проверка паролей

1 Получить хэш от пароля пользователя и сохранить его

2 При аутентификации запросить пароль

Получить хэш от полученного пароля и сравнить его с


3 сохраненным хэшом в п.1
Хранение и проверка паролей

1 Получить хэш от пароля пользователя и сохранить его

2 При аутентификации запросить пароль

Получить хэш от полученного пароля и сравнить его с


3 сохраненным хэшом в п.1

Если две строки совпадают, значит пароль введен


4 правильно
Как сохранить пароль пользователя
Как сохранить пароль пользователя

abc123

*******

Пользователь придумывает себе пароль и


отправляет его через форму
Как сохранить пароль пользователя
abc123
abc123

*******

$2y$10$Oqvs…

В PHP-сценарии мы получаем этот пароль и


преобразуем его в "хэш"
Как сохранить пароль пользователя
abc123
abc123

******* id email password


42 igorek@rambler.ru $2y$10…
$2y$10$Oqvs… 41 anna@bk.ru $2y$28…

Получившийся хэш пароля сохраняется в базе данных


вместе с остальной информацией пользователя
Хэширование и проверка пароля в PHP

$passwordHash = password_hash('secret-password', PASSWORD_DEFAULT);



if (password_verify('bad-password', $passwordHash)) {   



  // корректный пароль

} else {    

  // неверный пароль

}
Хэширование и проверка пароля в PHP

получает хэш пароля

$passwordHash = password_hash('secret-password', PASSWORD_DEFAULT);



if (password_verify('bad-password', $passwordHash)) {   



  // корректный пароль

} else {    

  // неверный пароль

}
Хэширование и проверка пароля в PHP

получает хэш пароля

$passwordHash = password_hash('secret-password', PASSWORD_DEFAULT);




сравнивает введенный пароль с хэшом

if (password_verify('bad-password', $passwordHash)) {   



  // корректный пароль

} else {    

  // неверный пароль

}
Обзор всего процесса
Аутентификация и авторизация на сайте
Обзор всего процесса
Аутентификация и авторизация на сайте

юзер

форма входа
Обзор всего процесса
Аутентификация и авторизация на сайте

юзер показать

форму

форма входа
Обзор всего процесса
Аутентификация и авторизация на сайте

валидация

юзер показать

форму

форма входа
Обзор всего процесса
Аутентификация и авторизация на сайте

валидация

юзер показать
 проверка



форму пароля

форма входа
Обзор всего процесса
Аутентификация и авторизация на сайте

валидация

юзер показать
 проверка
 открыть



форму пароля сессию

форма входа
Обзор всего процесса
Аутентификация и авторизация на сайте

валидация

юзер показать
 проверка
 открыть



форму пароля сессию

форма входа закрытая страница


Обзор всего процесса
Аутентификация и авторизация на сайте

проверка наличия сессии


валидация

юзер показать
 проверка
 открыть



форму пароля сессию

форма входа закрытая страница


Обзор всего процесса
Аутентификация и авторизация на сайте

проверка наличия сессии


валидация

юзер показать
 проверка
 открыть
 разрешить



форму пароля сессию доступ

форма входа закрытая страница


Обзор всего процесса
Аутентификация и авторизация на сайте

проверка наличия сессии


валидация

юзер показать
 проверка
 открыть
 разрешить
 показать


форму пароля сессию доступ ошибку 403

форма входа закрытая страница


Начало

Показать форму входа

Получить данные
из формы

Преобразовать пароль в хэш

Поискать в данных пользователя с


этим email и хэшом

Да Нет
Нашли?

Открыть сессию Показать форму с ошибками

Редирект на главную
Проверка пароля пользователя
Проверка пароля пользователя
1. Найти пользователя (в массиве или из базы данных)

по переданному логину/email
Проверка пароля пользователя
1. Найти пользователя (в массиве или из базы данных)

по переданному логину/email

2. Захешировать переданный пароль


Проверка пароля пользователя
1. Найти пользователя (в массиве или из базы данных)

по переданному логину/email

2. Захешировать переданный пароль

3. Сравнить сохраненный хэш пользователя с хэшем



из п. 2
Проверка пароля пользователя
1. Найти пользователя (в массиве или из базы данных)

по переданному логину/email

2. Захешировать переданный пароль

3. Сравнить сохраненный хэш пользователя с хэшем



из п. 2

4. Открыть сессию, если хэши совпадают


Ограничение доступа к страницам
Ограничение доступа к страницам

?
Как запретить анонимным
пользователям посещать некоторые
страницы?
Ограничение доступа к страницам

?
Как запретить анонимным
пользователям посещать некоторые
страницы?

! Сохранять данные о пользователя в


сессию, а затем проверять её.
Ограничение доступа к страницам

?
Как запретить анонимным
пользователям посещать некоторые
страницы?

! Сохранять данные о пользователя в


сессию, а затем проверять её.

После успешной аутентификации пользователя будем



сохранять информацию о нем в $_SESSION
Как запретить доступ к странице
Как запретить анонимному пользователю посещать 

закрытые страницы:

• принудительно перенаправлять на главную


• ставить код ответа 403 и показывать ошибку

Перенаправление с закрытой страницы

<?php
if (!isset($_SESSION['user'])) {
  header("Location: /");
  exit();
}
Скрытие информации со страницы
В зависимости от статуса пользователя (залогинен или нет)
можно показывать разную информацию на странице
Скрытие информации со страницы
В зависимости от статуса пользователя (залогинен или нет)
можно показывать разную информацию на странице

Анонимный пользователь

• показать ссылку входа



и регистрации
• скрывать ссылку на 

добавление гифки
• скрывать блок комментариев

на странице просмотра
Скрытие информации со страницы
В зависимости от статуса пользователя (залогинен или нет)
можно показывать разную информацию на странице

Анонимный пользователь Залогиненный пользователь

• показать ссылку входа
 • показать ссылку на выход



и регистрации и профиль
• скрывать ссылку на 
 • показывать кнопки «избранное»

добавление гифки и «нравится»
• скрывать блок комментариев
 • показать блок комментариев

на странице просмотра на странице просмотра
Скрытие информации со страницы
<?php if (!isset($_SESSION['user'])): ?>

  <nav class="navigation __links">

    <a href="/signup">Регистрация </a> 

    <a href="/signin">Вход для своих </a>

  </nav>

<?php else: ?>

  <nav class="navigation __links">        

    <a href="">< ?=strip_tags($_SESSION['user']['name']); ?> </a> 

    <a href="/favorites">Избранное </a> 

    <a href="/logout">Выход </a>    

  </nav>

<?php endif; ?>
Скрытие информации со страницы
<?php if (!isset($_SESSION['user'])): ?>

  <nav class="navigation __links">

    <a href="/signup">Регистрация </a> 

    <a href="/signin">Вход для своих </a>

  </nav>

<?php else: ?>

  <nav class="navigation __links">        

    <a href="">< ?=strip_tags($_SESSION['user']['name']); ?> </a> 

    <a href="/favorites">Избранное </a> 

    <a href="/logout">Выход </a>    

  </nav>

<?php endif; ?>
Скрытие информации со страницы
<?php if (!isset($_SESSION['user'])): ?>

  <nav class="navigation __links">

    <a href="/signup">Регистрация </a> 

    <a href="/signin">Вход для своих </a>

  </nav>

<?php else: ?>

  <nav class="navigation __links">        

    <a href="">< ?=strip_tags($_SESSION['user']['name']); ?> </a> 

    <a href="/favorites">Избранное </a> 

    <a href="/logout">Выход </a>    

  </nav>

<?php endif; ?>
Как разлогинить пользователя
Для залогиненного пользователя обязательно должна быть 

возможность завершить сессию - «выйти с сайта».
Как разлогинить пользователя
Для залогиненного пользователя обязательно должна быть 

возможность завершить сессию - «выйти с сайта».

Отдельный сценарий, который:


• очищает сессию
• переадресует на другую 

страницу
Как разлогинить пользователя
Для залогиненного пользователя обязательно должна быть 

возможность завершить сессию - «выйти с сайта».

Отдельный сценарий, который:


• очищает сессию
• переадресует на другую 

страницу

<?php

unset($_SESSION['user']);


header("Location: /index.php");
Восстановление пароля
возможность пользователю восстановить забытый
пароль, используя свой e-mail
Как работает восстановление пароля
Как работает восстановление пароля

Юзер указывает свой email


Как работает восстановление пароля

Юзер указывает свой email

Отправляем ему ссылку со 



специальным кодом
Как работает восстановление пароля

Юзер указывает свой email

Отправляем ему ссылку со 



специальным кодом

Юзер переходит по ссылке на страницу с


формой для ввода нового пароля
Как работает восстановление пароля

Юзер указывает свой email

Отправляем ему ссылку со 



специальным кодом

Юзер переходит по ссылке на страницу с


формой для ввода нового пароля

Новый пароль хэшируется и сохраняется


для юзера
Как работает восстановление пароля

Юзер указывает свой email

Отправляем ему ссылку со 



специальным кодом

Юзер переходит по ссылке на страницу с


формой для ввода нового пароля

Новый пароль хэшируется и сохраняется


для юзера

Юзер логинится на сайт с новым паролем

Вам также может понравиться