PHP
Печенье
Поиск…
Вступление
HTTP-файл cookie представляет собой небольшую часть данных, отправленных с веб-сайта и хранящихся на компьютере пользователя с помощью веб-браузера пользователя во время просмотра пользователем.
Синтаксис
bool setcookie( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )
параметры
параметр | подробно |
---|---|
название | Имя файла cookie. Это также ключ, который вы можете использовать для извлечения значения из супер-глобального $_COOKIE . Это единственный требуемый параметр |
значение | Значение для хранения в файле cookie. Эти данные доступны для браузера, поэтому не храните здесь ничего чувствительного. |
истекать | Временная метка Unix, представляющая время истечения срока действия файла cookie. Если установлено равным нулю, файл cookie истекает в конце сеанса. Если установлено на меньшее число, чем текущая временная метка Unix, файл cookie истекает немедленно. |
дорожка | Объем файла cookie. Если установлено значение / cookie будет доступен во всем домене. Если установлено значение /some-path/ cookie будет доступен только в этом пути и потомках этого пути. По умолчанию используется текущий путь к файлу, в котором установлен файл cookie. |
домен | Домен или субдомен cookie доступен. Если установить на пустой домен stackoverflow.com cookie будет доступен для этого домена и всех поддоменов. Если он установлен в поддомену meta.stackoverflow.com cookie будет доступен только в этом поддомене и во всех поддоменах. |
безопасный | Если установлено значение TRUE cookie будет установлен только в том случае, если между клиентом и сервером существует безопасное соединение HTTPS. |
HttpOnly | Указывает, что файл cookie должен быть доступен только по протоколу HTTP / S и не должен быть доступен для языков сценариев на стороне клиента, таких как JavaScript. Доступно только в PHP 5.2 или новее. |
замечания
Стоит отметить, что простая функция setcookie
не просто помещает данные в $_COOKIE
массив $_COOKIE
.
Например, нет смысла делать:
setcookie("user", "Tom", time() + 86400, "/");
var_dump(isset($_COOKIE['user'])); // yields false or the previously set value
Значение еще не указано, пока не загрузится следующая страница. Функция setcookie
просто говорит: « setcookie
следующего http-соединения скажите клиенту (браузеру) установить этот файл cookie ». Затем, когда заголовки отправляются в браузер, они содержат этот заголовок файла cookie. Затем браузер проверяет, еще ли истек ли файл cookie, а если нет, то в HTTP-запросе он отправляет файл cookie на сервер, и именно тогда PHP получает его и помещает содержимое в массив $_COOKIE
.
Настройка файла cookie
setcookie()
cookie устанавливается с помощью функции setcookie()
. Поскольку файлы cookie являются частью HTTP-заголовка, вы должны установить все файлы cookie перед отправкой любого вывода в браузер.
Пример:
setcookie("user", "Tom", time() + 86400, "/"); // check syntax for function params
Описание:
- Создает файл cookie с именем
user
- (Необязательно) Значение файла cookie - это
Tom
- (Дополнительно) Cookie истечет через 1 день (86400 секунд)
- (Дополнительно) Cookie доступен на всем веб-сайте
/
- (Необязательно) Cookie отправляется только через HTTPS
- (Необязательно) Cookie недоступен для скриптовых языков, таких как JavaScript
Созданный или измененный файл cookie может быть доступен только при последующих запросах (где
path
иdomain
совпадают), поскольку$_COOKIE
не заполняется новыми данными немедленно.
Получение файла cookie
Получить и вывести имя user
cookie
Значение cookie можно получить с помощью глобальной переменной $_COOKIE
. Например, если у нас есть файл cookie с именем user
мы можем его восстановить так
echo $_COOKIE['user'];
Изменение файла cookie
Значение cookie может быть изменено путем сброса файла cookie
setcookie("user", "John", time() + 86400, "/"); // assuming there is a "user" cookie already
Куки-файлы являются частью HTTP-заголовка, поэтому необходимо
setcookie()
, прежде чем какой-либо вывод будет отправлен в браузер.
При изменении файла cookie убедитесь, что параметры
path
иdomain
setcookie()
соответствуют существующему файлу cookie или будет создан новый файл cookie.
Часть значения файла cookie будет автоматически указана в urlencoded при отправке файла cookie, и когда он будет получен, он будет автоматически декодирован и назначен переменной с тем же именем, что и имя файла cookie
Проверка установленного Cookie
Используйте функцию isset()
для $_COOKIE
переменной $_COOKIE
чтобы проверить, установлен ли файл cookie.
Пример:
// PHP <7.0
if (isset($_COOKIE['user'])) {
// true, cookie is set
echo 'User is ' . $_COOKIE['user'];
else {
// false, cookie is not set
echo 'User is not logged in';
}
// PHP 7.0+
echo 'User is ' . $_COOKIE['user'] ?? 'User is not logged in';
Удаление куки-файлов
Чтобы удалить файл cookie, установите временную метку истечения времени в прошлое. Это вызывает механизм удаления браузера:
setcookie('user', '', time() - 3600, '/');
При удалении файла cookie убедитесь, что параметры
path
иdomain
setcookie()
соответствуют файлу cookie, который вы пытаетесь удалить, или будет создан новый файл cookie, который истекает немедленно.
Также неплохо $_COOKIE
значение $_COOKIE
в случае использования текущей страницы:
unset($_COOKIE['user']);