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