Php пользователи и куки

Cookies – это механизм хранения данных браузером для отслеживания или идентификации возвращающихся посетителей. В PHP работа с Cookie происходит следующем образом:

Установка cookies

Установка cookies производится функцией setcookie или setrawcookie (без URL-кодирования значения).

Cookie передаются клиенту вместе с другими HTTP-заголовками, поэтому setcookie() должна быть вызвана до вывода в браузер.

setcookie($name, $value, $expires, $path, $domain, $secure, $httponly);

$expires – время жизни (метка времени Unix), если 0 или пропустить аргумент, cookie будут действовать до закрытия браузера.

$path – путь к директории, из которой будут доступны cookie. Если задать ‘/’, cookie будут доступны во всем домене.

$domain – домен, которому доступны cookie. Например, ‘ www.example.com ‘ сделает cookie доступными только в нём. Для того, чтобы сделать cookie доступными для всего домена и поддоменов, нужно указать имя домена ‘ example.com ‘.

$secure – при true значения cookie будут доступны только по HTTPS.

$httponly – при true , cookie будут доступны только через HTTP-протокол.

Пример установки cookies:

// До закрытия браузера setcookie('test-1', 'Значение 1'); // На 1 месяц setcookie('test-1', 'Значение 1', strtotime('+30 days'));

Пример установки массива в cookies:

setcookie('test-2[0]', 'Значение 1'); setcookie('test-2[1]', 'Значение 2'); setcookie('test-2[2]', 'Значение 3');

или

$array = array( 'Значение 1', 'Значение 2', 'Значение 3', ); foreach ($array as $i => $row)

Альтернативная вариант доступен с PHP 7.3.0:

setcookie($name, $value, $options);

Где $options массив, который может содержать любой из ключей: expires , path , domain , secure , httponly и samesite .

Значение элемента samesite может быть либо None , Lax или Strict .

setcookie('test-1', 'Значение 1', array( 'expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => 'example.com', 'secure' => true, 'httponly' => true, 'samesite' => 'None' ));

Чтение cookies

После передачи клиенту cookie станут доступны через глобальный массив $_COOKIE при следующей загрузке страницы. Значения cookie также есть в массиве $_REQUEST .

Например, вывести одно конкретное значение cookie:

Вывести массив:

Array ( [0] => Значение 1 [1] => Значение 2 [2] => Значение 3 )

Удаление cookies

Чтобы удалить cookies достаточно в setcookie() , в аргументе $expires указать какое-либо прошедшее время. Например 1 час:

setcookie('test-1', '', time() - 3600);
if (isset($_SERVER['HTTP_COOKIE'])) < $cookies = explode(';', $_SERVER['HTTP_COOKIE']); foreach($cookies as $cookie) < $parts = explode('=', $cookie); $name = trim($parts[0]); setcookie($name, '', time() - 3600); >>

Источник

Аутентификация пользователя

Часто сайты должны уметь идентифицировать своих посетителей, чтобы сохранять и показывать им позже какую-либо информацию.

Например, интернет-магазины могут сохранять историю просмотров, чтобы рекомендовать потенциальным покупателям наиболее подходящие им товары. Или агрегатор новостей мог бы предложить пользователям выбирать только интересующие их рубрики.

К счастью HTTP и все браузеры предоставляют возможность сохранения информации о пользователе.

Cookies

Cookies (в дальнейшем просто «куки») — небольшие фрагменты данных, которые веб-сервер отправляет браузеру. Браузер сохраняет их у себя, а при следующем посещении веб-страницы отправляет обратно. Благодаря этому, веб-сервер сможет узнать своего «старого» посетителя.

👉 С технической стороны, куки — это обычные HTTP-заголовки.

Когда веб-сервер хочет записать куку в браузер пользователя, он отсылает специальный заголовок ответа с названием Set-Cookie . В этом заголовке должна содержаться необходимая информация и дополнительные аттрибуты, о которых пойдёт речь далее.

В следующий раз, когда браузер пользователя запросит веб-страницу с того же сайта, в числе прочих заголовков браузер передаёт заголовок запроса Cookie . Веб-сервер получит эту информацию, и она будет доступна также и для PHP.

Как установить куки: функция setcookie

Задача очень проста: сохранять и показывать посетителю страницы, сколько раз он посетил наш сайт. Для этого будем сохранять количество посещений в отдельной куке, увеличивая значения на единицу при каждой загрузке страницы.

PHP может управлять заголовками, которые отправляет сервер, а значит, может устанавливать и читать куки.

Чтобы добавить новую куку, необходимо вначале определиться со следующими критериями:

  • Название куки (может состоять только из символов латинского алфавита и цифр);
  • Значение, которое предполагается хранить;
  • Срок жизни куки — это обязательное условие.

За установку куки в PHP отвечает функция setcookie , ей нужно передать как минимум три параметра, описанных выше. Пример:

Обратите внимание, что срок жизни указывается относительно текущей даты. В этом примере кука будет существовать ровно 30 дней с момента установки.

Как прочитать куки

В PHP максимально упрощён процесс чтения информации из cookies. Поэтому все переданные сервером куки доступны в специальном глобальном массиве $_COOKIE .

Так, чтобы получить содержимое куки с именем visit_count , достаточно обратиться к одноимённому элементу массива $_COOKIE , например, вот так:

Обратите внимание: установив в сценарии куку через setcookie , прочитать её можно будет только при следующем посещении страницы.

Собираем всё вместе

Теперь, научившись устанавливать и читать куки, напишем полноценный сценарий, который будет считать и выводить количество посещений страницы пользователем:

 setcookie("visit_count", $visit_count, strtotime("+30 days")); print("Количество посещений: " . $visit_count); ?> 

Сессии

Мы уже умеем сохранять информацию для пользователя между посещениями страницы с помощью кук. Но зачем нам ещё и сессии?

Сессии, они же сеансы, это, по сути, просто удобная обёртка над куками. Они также позволяют хранить данные пользователя, но с некоторыми отличиями и ограничениями:

  • Данные хранятся не произвольное время, а только до закрытия вкладки с веб-страницей.
  • Чтобы сессии работали, в начале каждого сценария надо вызывать функцию session_start() .
  • Доступный объём для хранения информации намного больше.

Запись и чтение информации при использовании сессий выглядит просто как работа со специальным массивом $_SESSION .

Как устроены сессии

  1. PHP генерирует уникальный идентификатор браузера.
  2. Идентификатор сохраняется в специальную куку и передаётся с каждым запросом.
  3. Все данные, которые записываются в сессию, PHP автоматически сохраняет в специальном файле на сервере.

Благодаря существованию сессий в PHP мы можем сохранять любые данные так же просто, как присваивать их переменным. Но, в отличие от переменных, эти данные будут сохраняться для пользователя между запросами в пределах сеанса.

Перепишем сценарий для подсчета посещений, но теперь используем сессии:

 $_SESSION["visit_count"] = $visit_count; print("Количество посещений: " . $visit_count); ?> 

Аутентификация

Представим интернет-магазин. Все его страницы можно разделить на две половины: публичные и приватные.

К публичным относятся страницы каталога, информации о товаре, условия доставки и так далее. К приватным — корзина покупок, история заказов. Совершенно очевидно, что корзина покупок у каждого покупателя должна быть своя, а иметь к ней доступ должен только сам владелец и никто больше.

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

  1. При попытке доступа к закрытой части сайта, пользователь видит форму ввода логина и пароля.
  2. Форма отправляется, а полученные данные сравниваются с действительным логином и паролем существующего пользователя.
  3. Если данные совпадают, то пользователь считается аутентифицированным и получает доступ к приватной части сайта.
  4. При повторном открытии этой страницы пользователь не должен повторно вводить пароль, если он уже делал это в рамках текущего сеанса.

Отличие аутентификации и авторизации

Следует различать два термина: аутентификация и авторизация.

👉 Аутентификация — проверка подлинности предоставленного пользователем идентификатора (пара логин-пароль).

Авторизация — процесс проверки и предоставления прав пользователю на выполнение определённого действия.

В примере с интернет-магазином аутентификация выполняется, когда пользователь заполняет форму входа и попадает в свой личный кабинет. Сценарий, обрабатывающий форму, лишь проверяет, что такой пользователь существует, и его пароль совпадает.

Авторизация включается в работу, когда пользователь выполняет какое-нибудь действие. Например, удаляет товар из своей корзины. Во время этого действия сценарий должен проверить принадлежность товара к корзине этого пользователя. Без такой проверки пользователь мог бы удалить товар из чужой корзины.

Логика авторизации намного сложнее, чем простая проверка совпадения почты и пароля при входе на сайт. В авторизацию могут также входить следующие понятия: группы пользователей, виды действий, ресурсы, иерархия ролей и действий. Этой теме можно посвятить отдельную главу, но в рамках этого учебника мы не рассматриваем эту тему.

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

Сессии чаще всего используются для хранения информации о залогиненном пользователе.

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

Затем добавим код, проверяющий существование сессии в сценарии, который должен быть закрыт от анонимных пользователей.

Если сессия пуста, значит, пользователь не выполнял вход на сайт и доступа к данной странице не имеет. В этом случае можно вернуть код ответа 403 и показать сообщение об ошибке, либо принудительно выполнить переадресацию на главную страницу.

Выход с сайта. Как закрыть сессию

Если на сайте есть вход, то должен быть и выход. Таким выходом будет специальный сценарий, который очистит сессию и переадресует на главную страницу.

Чтобы очистить сессию, достаточно очистить массив $_SESSION : $_SESSION = []

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Источник

Читайте также:  CHILD WINDOW/TAB
Оцените статью