Перейти к содержимому

Функция PHP setcookie(): всё, что нужно знать

Как PHP-разработчику, вам может потребоваться устанавливать cookies для хранения информации на стороне клиента. Функция setcookie() — это встроенная функция PHP, которая занимается этим. В этой статье мы рассмотрим её современный синтаксис, применение, а также то, как читать или удалять cookies.

Что такое функция setcookie()?

Функция setcookie() — это встроенная функция PHP, которая позволяет устанавливать cookie на стороне клиента.

Как использовать функцию setcookie()

Использование функции setcookie() довольно просто. Синтаксис с массивом параметров был добавлен в PHP 7.3. В PHP 8.1 устаревший синтаксис с семью позиционными параметрами был помечен как устаревший. Вот современный синтаксис:

PHP-синтаксис функции setcookie()

php
setcookie($name, $value, $options);

Параметр $options — это ассоциативный массив, принимающий следующие ключи:

  • expires: Время истечения срока действия cookie (Unix-временная метка).
  • path: Путь на сервере, в котором cookie будет доступна.
  • domain: Домен, на котором cookie будет доступна.
  • secure: Указывает, должна ли cookie передаваться только по HTTPS.
  • httponly: Указывает, должна ли cookie быть доступной только через HTTP (не через клиентские скрипты).
  • samesite: Ограничивает использование cookie запросами с того же сайта. Принимает 'Strict', 'Lax' или 'None'.

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

Как использовать функцию setcookie()?

php
<?php

$options = [
    'expires'  => time() + (86400 * 30), // 30 дней
    'path'     => '/',
    'domain'   => '.example.com',
    'secure'   => true,
    'httponly' => true,
    'samesite' => 'Lax'
];
setcookie('username', 'john', $options);

В этом примере мы используем функцию setcookie() для установки cookie с именем username и значением john. Мы также указываем время истечения через 30 дней от текущего момента, путь на сервере как /, домен как .example.com, а флаги secure, httponly и samesite устанавливаем для обеспечения передачи cookie только по HTTPS, недоступности через клиентские скрипты и ограничения использования запросами с того же сайта соответственно.

Чтение cookies

Cookies, установленные с помощью setcookie(), автоматически становятся доступными в суперглобальном массиве $_COOKIE при последующих запросах страницы. Вы можете проверить их наличие и прочитать значения следующим образом:

php
if (isset($_COOKIE['username'])) {
    echo "Welcome, " . htmlspecialchars($_COOKIE['username']);
}

Удаление cookies

Чтобы удалить cookie, необходимо установить время её истечения в прошлое. Значение можно оставить пустым или установить в null.

php
setcookie('username', '', [
    'expires' => time() - 3600,
    'path'    => '/',
]);

Важные примечания

  • Возвращаемое значение: setcookie() возвращает true при успехе и false при ошибке (в том числе при уже отправленных заголовках).
  • Заголовки уже отправлены: Cookies должны устанавливаться до отправки любого вывода в браузер (включая HTML, пробелы или echo). В противном случае PHP выдаст предупреждение "Headers already sent".
  • Автоматическое кодирование: setcookie() автоматически URL-кодирует значения cookies, поэтому ручное кодирование обычно не требуется.

Заключение

Функция setcookie() — полезный инструмент для установки cookies в вашем PHP-веб-приложении. Понимая современный синтаксис и особенности использования функции, вы сможете легко управлять данными на стороне клиента. Надеемся, эта статья оказалась полезной и помогла разобраться в том, как устанавливать, читать и удалять cookies в PHP.

Практика

Какие факторы могут влиять на работу функции setcookie в PHP?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.