- Cookies. Примеры работы с куками в PHP
- Установка куков, простой пример
- Получение куков через PHP
- Удаление куков
- Миша
- $_COOKIE
- Примеры
- Примечания
- Смотрите также
- User Contributed Notes 5 notes
- Работа с cookie в PHP
- Установка cookies
- Пример установки cookies:
- Пример установки массива в cookies:
- или
- Чтение cookies
- Например, вывести одно конкретное значение cookie:
- Вывести массив:
- Удаление cookies
- Удалить все cookie
Cookies. Примеры работы с куками в PHP
C самого начала поста я предположу, что вы уже знаете что такое куки и для чего их можно использовать. И собственно пост рассчитан как раз на тех людей, которые хотят узнать ответ на вопрос «КАК?» — то есть задействовать куки на своём сайте.
Установка куков, простой пример
Чтобы установить куки, вам как минимум нужно задать название, содержание и количество времени, которое эта кука будет существовать.
$name = 'Миша'; setcookie('my_name',$name,time() + (86400 * 5)); // 86400 = 1 день в секундах
Например тут мы установили куки my_name со значением Миша и в качестве периода её существования задали 5 дней в UNIX-формате времени. time() — текущее время + 86400 * 5 — 5 дней в секундах.
Получение куков через PHP
Теперь, когда куки установлены, давайте попробуем вывести их на сайте (если конечно уже не прошло 5 дней :), для этого мы просто воспользуемся массивом $_COOKIE , который кстати можно просто целиком поглядеть через функцию print_r() , но мы пойдём более правильным путём, проверим ещё, что куки существует.
echo 'Привет, '. ( $_COOKIE['my_name'] != '' ? $_COOKIE['my_name'] : 'Гость') . '!'; // Привет, Миша!
То, что вы видите в круглых скобках, это обычное условие if-else , только в сокращенном виде, в полном виде оно бы выглядело вот так:
if( $_COOKIE['my_name'] != '' ) echo 'Привет, ' . $_COOKIE['my_name'] . '!'; else echo 'Привет, Гость!';
Всё очень просто, верно же?
Функция setcookie() на самом деле имеет и несколько других параметров и пример можно усложнить, включив в неё директорию, домен, защиту и использование только по HTTP. Сейчас объясню.
setcookie('my_name', $name, time() + (86400* 5), '/~mycookie/','truemisha.ru',true,true);
По сути куки та же самая, но мы также назначили её к директории «~mycookie» для домена «truemisha.ru», следующим параметров, равным true разрешили использовать только в SSL-подключении и в следующем параметре, тоже равным true , запретили для использования в JavaScript.
Также имейте ввиду несколько вещей:
- Несмотря на то, что мы ставим срок истечения действия куков, они могут быть удалены пользователем в любое время.
- Пользователь может вообще выключить куки в браузере.
- Куки ни при каких условиях не получится использовать между разными доменами.
Удаление куков
Первый — если вы установите время истечения куки равным 0, то она будет удалена по истечении сессии в браузера (после закрытия)
Чтобы удалить куку немедленно, вам нужно установить ей пустое значение или срок истечения в прошедшем времени, например:
setcookie ( 'my_name', '', time()-5 );
Миша
Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.
Пишите, если нужна помощь с сайтом или разработка с нуля.
$_COOKIE
Ассоциативный массив ( array ) значений, переданных скрипту через HTTP Cookies.
Примеры
Пример #1 Пример использования $_COOKIE
Предположим, что значение куки с именем «name» было установлено ранее.
Результатом выполнения данного примера будет что-то подобное:
Примечания
Замечание:
Это ‘суперглобальная’ или автоматическая глобальная переменная. Это просто означает, что она доступна во всех контекстах скрипта. Нет необходимости выполнять global $variable; для доступа к ней внутри метода или функции.
Смотрите также
User Contributed Notes 5 notes
To clarify the previously posted note:
Dots (.) and spaces ( ) in cookie names are being replaced with underscores (_).
The values of $_COOKIE in general are not identic with the values in $_SERVER[«HTTP_COOKIE»]!
In phpinfo() $_SERVER[«HTTP_COOKIE»] shows the actual value stored in the cookie by the browser in 7bit.
In $_COOKIE is this value after a 7bit to 8bit conversion.
When all characters in $_SERVER[«HTTP_COOKIE»] are in ASCII = 7bit, $_COOKIE is displayed in phpinfo(). When one single character is not in ASCII, phpinfo() shows no value!
Although in $_COOKIE is still the 8bit conversion of $_SERVER[«HTTP_COOKIE»]!
The reason: the 8bit conversion alone is not enough to say what characters are meant.
For that the used character-set is necessary.
phpinfo() does not know the character-set and better says nothing.
When using $_COOKIE in a php-generated web page the environment has the info of used character-set and so the meant characters can be displayed.
Three illustrating examples
===========================
A HTML-form is used to get the content which shall be stored in a cookie named «test».
Input string in field «test»: door
$_SERVER[«HTTP_COOKIE»]: test=door
$_COOKIE[«test»]
displayed in phpinfo(): door
displayed in any html page: door
Input string in field «test» (ISO-8859-1 used in form): Tür
$_SERVER[«HTTP_COOKIE»]: test=T%FCr
$_COOKIE[«test»]
displayed in phpinfo(): «»
displayed in a ISO-8859-1-html-page: Tür
(displayed in a UTF-8-html-page: T�r)
Input string in field «test» (UTF-8 used in form): Tür
$_SERVER[«HTTP_COOKIE»]: test=T%C3%BCr
$_COOKIE[«test»]
displayed in phpinfo(): «»
displayed in a UTF-8-html-page: Tür
(displayed in a ISO-8859-1-html-page: Tür)
PHP replaces dots (.) with underscores (_). To find all original cookie names (and value) you can use $_SERVER[‘HTTP_COOKIE’].
For example to retrieve a cookie set with you may use:
$cookies = explode ( ‘; ‘ , $_SERVER [ ‘HTTP_COOKIE’ ]);
$allCookies = [];
foreach( $cookies as $cookie ) $keyAndValue = explode ( ‘=’ , $cookie );
$allCookies [ $keyAndValue [ 0 ]] = $keyAndValue [ 1 ];
>
var_dump ( $allCookies );
/*
array(1) [«testing.dots»]=>
string(5) «value»
>
*/
echo $allCookies [ ‘testing.dots’ ];
?>
Работа с cookie в 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);
Удалить все 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); >>