Cookie php это кто
Cookie (куки) представляют небольшие наборы данных (не более 4 кБайт), с помощью которых веб-сайт может сохранить на компьютере пользователя любую информацию. С помощью куки можно отслеживать активность пользователя на сайте: залогинен пользователь на сайте или нет, отслеживать историю его визитов и т.д.
Сохранение cookie
Для установки куки на компьютере пользователя используется функция setcookie() . Она должна вызываться перед тем, как будет отправлен ответ пользователю. Эта функция имеет следующее определение:
bool setcookie(string $name, string $value, int $expire, string $path, string $domain, bool $secure, bool $httponly);
Функция setcookie() может принимать следующие параметры:
- name : имя cookie, которое будет использоваться для доступа к его значению
- value : значение или содержимое cookie — любой алфавитно-цифровой текст не более 4 кБайт
- expire (необязательный параметр): срок действия в секундах, после которого cookie уничтожаются. Если данный параметр не установлен или равен 0, то уничтожение cookie происходит после закрытия браузера. Обычно устанавливается относительно текущего времени, которое можно получить с помощью функции time()
- path (необязательный параметр): путь к каталогу на сервере, для которого будут доступны cookie. Если задать «/», cookie будут доступны для всего сайта. Если задать, например, «/mydir/» , cookie будут доступны только из каталога /mydir/ и всех его подкаталогов. По умолчанию значением является текущий каталог, в котором устанавливаются cookie.
- domain (необязательный параметр): задает домен, для которого будут доступны cookie. Если это домен второго уровня, например, localhost.com , то cookie доступны для всего сайта localhost.com, в том числе и для его поддоменов типа blog.localhost.com . Если задан поддомен blog.localhost.com , то cookie доступны только внутри этого поддомена.
- secure (необязательный параметр): указывает на то, что значение cookie должно передаваться по протоколу HTTPS. Если задано true , cookie от клиента будет передано на сервер, только если установлено защищенное соединение. По умолчанию равно false .
- httponly (необязательный параметр): если равно true , cookie будут доступны только через http протокол. То есть cookie в этом случае не будут доступны скриптовым языкам, например, JavaScript. По умолчанию параметр равен false
Здесь устанавливаются две куки: «name» и «age». Первая куки уничтожается после закрытия браузера, а вторая — через 3600 секунд, то есть через час.
При необходимости мы можем увидеть сохраненные куки в браузере с помощью инструментов разработчика. Например, вид куки в Google Chrome:
В cookie можно сохранить любую информацию, но не стоит сохранять важные с точки зрения безопасности данные, например, пароли. А если и сохранять какую-то важную информацию, то следует хранить ее в зашифрованном виде.
Получение cookie
Чтобы получить cookie, можно использовать глобальный ассоциативный массив $_COOKIE , например, $_COOKIE[«name»] . Так, получим ранее сохраненные куки:
"; if (isset($_COOKIE["age"])) echo "Age: " . $_COOKIE["age"] . "
"; ?>
Сохранение массивов в cookie
Сохранение в куки массивов имеет некоторые особенности. Например, сохраним следующий массив:
setcookie("lang[1]", "PHP"); setcookie("lang[2]", "C#"); setcookie("lang[3]", "Java");
Теперь получим его и выведем на страницу:
if (isset($_COOKIE["lang"])) < foreach ($_COOKIE["lang"] as $name =>$value) < $name = htmlspecialchars($name); $value = htmlspecialchars($value); echo "$name. $value
"; > >
Удаление cookie
Для удаления cookie достаточно в качестве срока действия указать какое-либо время в прошлом:
setcookie ("name", "", time() - 3600);
Cookies
PHP прозрачно поддерживает HTTP cookies. Cookies — это механизм хранения данных браузером удалённой машины для отслеживания или идентификации возвращающихся посетителей. Вы можете установить cookies при помощи функций setcookie() или setrawcookie() . Cookies являются частью HTTP -заголовка, поэтому setcookie() должна вызываться до любого вывода данных в браузер. Это то же самое ограничение, которое имеет функция header() . Вы можете использовать функции буферизации вывода, чтобы задержать вывод результатов работы скрипта до того момента, когда будет известно, понадобится ли установка cookies или других заголовков.
Любые cookies, отправленные серверу браузером клиента, будут автоматически включены в суперглобальный массив $_COOKIE , если директива variables_order содержит букву «C». Для назначения нескольких значений одной cookie, просто добавьте [] к её имени.
Дополнительная информация, в том числе и особенности реализации браузеров, приведена в описании функций setcookie() и setrawcookie() .
User Contributed Notes 1 note
// Example
// Setting a cookie
setcookie ( «usertoken» , «noice» , time ()+ 20 * 24 * 60 * 60 );
// 20 days = 20*24*60*60 seconds
?php
setcookie ( «usertoken» , «» , time ()- 3600 )
?>
- Отличительные особенности
- HTTP-аутентификация в PHP
- Cookies
- Сессии
- Работа с XForms
- Загрузка файлов на сервер
- Работа с удалёнными файлами
- Работа с соединениями
- Постоянные соединения с базами данных
- Использование PHP в командной строке
- Сборка мусора
- Динамическая трассировка DTrace
$_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: doorInput 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’ ];
?>