Cookie (куки) представляют небольшие наборы данных (не более 4 кБайт), с помощью которых веб-сайт может сохранить на компьютере пользователя любую информацию. С помощью куки можно отслеживать активность пользователя на сайте: залогинен пользователь на сайте или нет, отслеживать историю его визитов и т.д.
Для установки куки на компьютере пользователя используется функция 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
Сохраним cookie:
<?php
$name = "Tom";
$age = 36;
setcookie("name", $name);
setcookie("age", $age, time() + 3600); // срок действия - 1 час (3600 секунд)
echo "Куки установлены";
?>
Здесь устанавливаются две куки: "name" и "age". Первая куки уничтожается после закрытия браузера, а вторая - через 3600 секунд, то есть через час.
При необходимости мы можем увидеть сохраненные куки в браузере с помощью инструментов разработчика. Например, вид куки в Google Chrome:
В cookie можно сохранить любую информацию, но не стоит сохранять важные с точки зрения безопасности данные, например, пароли. А если и сохранять какую-то важную информацию, то следует хранить ее в зашифрованном виде.
Чтобы получить cookie, можно использовать глобальный ассоциативный массив $_COOKIE, например, $_COOKIE["name"]. Так, получим ранее сохраненные куки:
<?php if (isset($_COOKIE["name"])) echo "Name: " . $_COOKIE["name"] . "<br>"; if (isset($_COOKIE["age"])) echo "Age: " . $_COOKIE["age"] . "<br>"; ?>
Сохранение в куки массивов имеет некоторые особенности. Например, сохраним следующий массив:
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 <br />";
}
}
Для удаления cookie достаточно в качестве срока действия указать какое-либо время в прошлом:
setcookie ("name", "", time() - 3600);