Cookies – это механизм хранения данных браузером для отслеживания или идентификации возвращающихся посетителей. В PHP работа с Cookie происходит следующем образом:
Установка cookies производится функцией setcookie или setrawcookie (без URL-кодирования значения).
Cookie передаются клиенту вместе с другими HTTP-заголовками, поэтому setcookie() должна быть вызвана до вывода в браузер.
setcookie($name, $value, $expires, $path, $domain, $secure, $httponly);
Где:
$name – название;
$value – значение;
$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) {
setcookie('test-2[' . $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'
));
После передачи клиенту cookie станут доступны через глобальный массив $_COOKIE при следующей загрузке страницы. Значения cookie также есть в массиве $_REQUEST.
Например, вывести одно конкретное значение cookie:
if (isset($_COOKIE['test-1'])) {
echo $_COOKIE['test-1']; // Значение 1
}
Вывести массив:
if (isset($_COOKIE['test-2'])) {
print_r($_COOKIE['test-2']);
}
Array
(
[0] => Значение 1
[1] => Значение 2
[2] => Значение 3
)
Чтобы удалить cookies достаточно в setcookie(), в аргументе $expires указать какое-либо прошедшее время. Например 1 час:
setcookie('test-1', '', time() - 3600);
Удалить все cookie
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);
}
}





