Cookies

Позволяют приложению хранить небольшие порции текстовых данных (4-6kB) на стороне клиента. Одно из целей использования cookies - хранение идентификатора сессии. Cookies обычно устанавливаются сервером с помощью соответствующих заголовков. Не следует рассматривать cookies как надежное хранилище данных.

Для установки cookie следует использовать функцию setcookie():

setcookie("hide_menu", "1");

Этот вызов создат cookie с именем hide_menu и значением 1. Cookie будет жить пока будет доступна сессия браузера. Если нужно установить время жизни cookie, то нужно передать Unix timestamp:

setcookie("hide_menu", "1", time() + 86400);

Данные о Cookie обычно отправляются на сервер с помощью одного заголовка запроса. PHP автоматически рапознает индивидуальные cookie и заполняет ими суперглобальный массив $_COOKIE:

if ($_COOKIE['hide_menu'] == 1) {
    // hide menu
}

Значения cookie должны быть скалярными, так же можно создавать массивы, используя тот же синтаксис, что и для GET и POST запросов:

setcookie("test_cookie[0]", "foo");
setcookie("test_cookie[1]", "bar");
setcookie("test_cookie[2]", "bar");

В следующем запросе $_COOKIE['test_cookie'] будет автоматически иметь массив.

Важно помнить, что установка cookie - это двух-этапный процесс. Сначала отправляются отправляются cookie клиенту и затем он отправляет их серверу. Это означает, что массив $_COOKIE не будет заполнен новыми данными, до тех пор, пока не придет новый запрос.

Нет способа удалить cookie, так как они хранятся на клиенте. Но можно обойти это ограничение, вызвав setcookie() с пустой строкой или с отрицательным временем жизни, что просто очистит cookie и в большинства случаев браузер удалит их:

setcookie("hide_menu", false, -3600);

Помимо суперглобального массива $_COOKIE cookie так же доступны и в суперглобальном массиве $_REQUEST.

Параметры setcookie()

name

Наименование cookie.

value

Значение cookie. Это значение будет сохранено на клиентском компьютере; не записывайте в cookie секретные данные. Значение присвоенное cookie c именем name, допустим, 'cookiename', будет доступно через $_COOKIE['cookiename'].

expire

Время, когда срок действия cookie истекает. Это метка времени Unix, то есть это количество секунд с начала эпохи. Другими словами, желательно задавать это время с помощью функции time(), прибавляя время в секундах, через которое срок действия cookie должен истечь. Либо можно воспользоваться функцией mktime(). time()+60602430 установит срок действия cookie* 30 дней. Если задать 0 или пропустить этот аргумент, срок действия cookie истечет с окончанием сессии (при закрытии броузера).

path

Путь к директории на сервере, из которой будут доступны cookie. Если задать '/', cookie будут доступны во всем домене domain. Если задать '/foo/', cookie будут доступны только из директории /foo/ и всех ее поддиректорий (например, /foo/bar/) домена domain. По умолчанию значением является текущая директория, в которой cookie устанавливается.

domain

Домен, которому доступны cookie. Задание домена 'www.example.com' сделает cookie доступными в поддомене www и поддоменах более высоких порядков. Cookie доступные низким уровням, таким как 'example.com', будут доступны во всех поддоменах высших уровней, с том числе 'www.example.com'.

secure

Указывает на то, что значение cookie должно передаваться от клиента по защищенному HTTPS соединению. Если задано TRUE, cookie от клиента будет передано на сервер, только если установлено защищенное соединение. При передаче cookie от сервера клиенту следить за тем, чтобы cookie этого типа передавались по защищенному каналу, должен программист веб-сервера (стоит обратить внимание на $_SERVER["HTTPS"]).

httponly

Если задано TRUE, cookie будут доступны только через HTTP протокол. То есть cookie в этом случае не будут доступны скриптовым языкам, вроде JavaScript. Эта возможность была предложена в качестве меры, эффективно снижающей количество краж личных данных посредством XSS атак (несмотря на то, что поддерживается не всеми броузерами). Стоит однако же отметить, что вокруг этой возможности часто возникают споры о ее эффективности и целесообразности. Аргумент добавлен в PHP 5.2.0. Может принимать значения TRUE или FALSE.

setrawcookie() Является полным аналогом функции setcookie(), исключая то, что значение cookie не будет автоматически преобразовано при отправке браузеру.