$_COOKIE
$HTTP_COOKIE_VARS [устаревшее]
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
$_COOKIE -- $HTTP_COOKIE_VARS [устаревшее] — HTTP Куки
Описание
Ассоциативный массив (array) значений,
переданных скрипту через HTTP Куки.
$HTTP_COOKIE_VARS содержит те же данные, но
не является суперглобальной
переменной. (Следует отметить, что
$HTTP_COOKIE_VARS и $_COOKIE
- различные переменные и PHP обрабатывает их по-разному)
Примеры
Пример #1 Пример использования $_COOKIE
<?php
echo 'Привет, ' . htmlspecialchars($_COOKIE["name"]) . '!';
?>
Положим, что значение куки с именем "name" было установлено
равным "Ханнес".
Результатом выполнения данного примера
будет что-то подобное:
Примечания
Замечание:
Это 'суперглобальная' или
автоматическая глобальная переменная. Это просто означает что она доступна во всех контекстах скрипта. Нет необходимости
выполнять global $variable; для доступа к ней внутри метода или функции.
Коментарии
beware, dots (.) in cookie names are replaces by underscores (_)
To clarify the previously posted note:
Dots (.) and spaces ( ) in cookie names are being replaced with underscores (_).
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 <?php setcookie('testing.dots', 'value'); ?> you may use:
<?php
$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'];
?>
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)