Работа с cookie в PHP

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

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

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

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

Где:

$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'));
PHP

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

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

или

$array = array(
	'Значение 1',
	'Значение 2',
	'Значение 3',
);

foreach ($array as $i => $row) {
	setcookie('test-2[' . $i . ']', $row);
}
PHP

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

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

Где $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'
));
PHP

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

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

if (isset($_COOKIE['test-1'])) {
	echo $_COOKIE['test-1']; // Значение 1
}
PHP

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

if (isset($_COOKIE['test-2'])) {
	print_r($_COOKIE['test-2']);
}
PHP
Array
(
    [0] => Значение 1
    [1] => Значение 2
    [2] => Значение 3
)

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

setcookie('test-1', '', time() - 3600);
PHP
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);
	}
}
PHP
22.12.2022
631

Комментарии

, чтобы добавить комментарий.

Другие публикации

Время жизни сессии в PHP
По умолчанию в php время жизни сессий всего 24 минуты, а cookies сохраняются до закрытия браузера, такие параметры установлены на многих хостингах.
35790
+7
Работа с FTP в PHP
Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.
12275
+2
Массив $_SERVER
Описание значений глобального массива $_SERVER с примерами.
34958
+3
Загрузка файлов на сервер PHP
В статье приведен пример формы и php-скрипта для безопасной загрузки файлов на сервер, возможные ошибки и рекомендации при работе с данной темой.
58371
+20
Интеграция с платежной системой PayKeeper в PHP
Платежная платформа PayKeeper позволяет принимать оплату заказов по ссылке, используя данный метод можно с легкостью...
6536
+2
Whois, как получить данные IP-адреса и домена в PHP
Несколько примеров как в PHP получить информацию о домене и IP-адресе.
14239
+4