PHP Cookie что это и как с ними работать на примерах
Взаимодействие сайта и браузера пользователя происходит разными способами, в том числе применяя PHP cookie. Взаимодействие нужно и даже необходимо для решения разных задач. Например, для того чтоб ваш логин и пароль сайт запомнил и вам не нужно было каждый раз вводить эти данные при посещении сайта. А также, для того чтоб интернет-магазин запомнил вашу корзину. Проще говоря, PHP cookie — это небольшие файлы в браузере который являются памятью, связанную с тем или иным сайтом. Время этой памяти можно регулировать, либо вовсе удалить ее, то есть, файл куков.
Установить PHP куки
Установка cookie происходит с помощью небольшого кода, а именно функцией setcookie(). Основные параметры которые нужно передать этой функции — это ключ, значение и время жизни куки.
<?php
// Создаём cookie с именем "userName" и значением "IT Шаман"
setcookie("userName", "IT Шаман", time() + 3600); // срок жизни — 1 час
?>
- Первое значение — ключ по которому будет идти поиск самой куки для ее чтения или удаления.
- Второе значение — само содержимое куки. Логин, пароль, ID или любое другое.
- Третье значение — время жизни куки, по истечению которого она будет удалена.
Таким образом мы создали куку на 1 час, где функция time() выдает текущее время и добавляем к нему еще 3600 миллисекунд (1 час).
Получить PHP куки
Для того чтоб получить, то есть, прочитать cookie используется глобальный массив $_COOKIE.
<?php
if (isset($_COOKIE["userName"])) {
echo "Привет, " . $_COOKIE["userName"] . "!";
} else {
echo "Привет, гость!";
}
?>
Таким образом мы изначально проводим проверку на наличие нужной нам cookie через функцию isset() заключенную в конструкцию if() {} else {}. Если нужная нам кука существует то мы выводим приветствие, если же нет то выводим приветствие гостю.
Удалить PHP куки
Удаляются cookie точно также просто как и создаются, разница лишь в том, что нужно указать время нужной куки прошедшим числом. То есть, к функции time() не добавить время а наоборот его уменьшить.
<?php
// Удаляем cookie с именем "userName" и значением "IT Шаман"
setcookie("userName", "IT Шаман", time() - 3600);
?>
При следующем обращении браузера к серверу, браузер удалить эту куку.
Безопасность PHP cookie
Важно понимать, что куки можно устанавливать для общего доступа к ним (ее могут прочитать и другие прогеры), а можно и закрыть данные от чтения. Например, пароль в cookie просто так заносить нельзя, так как через JavaScript тоже можно его прочитать. Важно запомнить пару советов:
- Не храните важные данные прямо в cookie? это касается паролей, токенов, различных ключей доступа и т.д.
- Можно использовать secure и httponly для того чтоб cookie не были доступны через JavaScript и не передавались через HTTP.
<?php
setcookie("session_id", "12345", [
'expires' => time() + 3600,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Strict',
]);
?>
В данном примере мы передали третьим параметром массив, в котором указали несколько значений. Рассмотрим каждый из них:
- expires — задает время хранения cookie.
- path — задает URL на котором эта cookie будет работать. Если задать / то работать будет на всем сайта, если же задать /tags то работать будет начиная с этого раздела и далее.
- secure и httponly — при указании этих атрибутов со значениями true, данные из cookie будут передаваться на сервер только в том случае, если у сайта установлен SSL и HTTPS.
- samesite — принимает значения Strict, Lax и None.
- Strict — данные cookie получит только тот сайт которому они принадлежат.
- Lax — работает похоже на Strict но данные cookie будут отправляться даже при переходе с другого сайта.
- None — снимает все ограничения на отправку cookie для межсайтовых обменов данными.
Ответы на несколько вопросов о куках
Чтоб отпали простые вопросы, если вдруг они появятся, сразу даем ответы:
- Где находятся созданные cookie — они хранятся на стороне пользователя, локально на его устройстве, в папках браузера в виде файлов.
- Можно ли сохранять массивы или объекты — да, но перед этим советую использовать переформатирование данных, например, с помощью json_encode().
- В каком количестве cookie можно создать — в среднем около 50 куков можно создавать на один сайт размером каждой до 4kb.
Итог работы с cookie
При правильном профессиональном подходе, PHP cookie дает большие возможности для хранения данных. Например, в ней можно хранить как логин с паролем и реферальный ID партнера, так и настройки дизайна вашего сайта для каждого пользователя. Если у себя на сайте вы сделаете настройки для каждого пользователя по дизайну, например, изменить цвет фона и текста под себя, то в cookie можно занести код цвета. При каждом новом заходе ваш сайт будет менять свой цвет только для определенного пользователя который внес свои настройки в свой профиль, то есть, создал определенные cookie.