Работа с cookie в 1С-Битрикс на новом ядре (D7)

Одним из важнейших инструментов при создании веб-приложений являются cookies (файлы cookie). Они помогают «узнавать» пользователя при повторном визите, сохранять определённые настройки интерфейса и обеспечивать механизм авторизации. В 1С-Битрикс существуют устаревшие методы работы с cookie (в старом ядре) и обновлённые классы в ядре D7, которые делают этот процесс более удобным и безопасным.

Работа с cookie в 1С-Битрикс на новом ядре (D7)

В данной статье вы познакомитесь с:

  1. Классическим (устаревшим) способом работы с cookie в 1С-Битрикс.
  2. Современным (D7) подходом к созданию и получению cookie через классы Bitrix\Main\HttpResponse и Bitrix\Main\HttpRequest.
  3. Примерами использования и рекомендациями по работе с cookie.

1. Классический способ (старое ядро)

В старом ядре 1С-Битрикс применялись методы:

  • CMain::set_cookie($name, $value, $time, $path, $domain, $secure, $spread), чтобы установить cookie.
  • CMain::get_cookie($name), чтобы получить cookie.

Пример установки cookie на старом ядре:


global $APPLICATION;

// Устанавливаем cookie "USER_LANG" со значением "ru"
// Куки будет храниться 30 дней (86400 секунд * 30)
$APPLICATION->set_cookie("USER_LANG", "ru", time() + 86400 * 30, "/");
    

Пример чтения cookie:


global $APPLICATION;

// Получаем значение cookie "USER_LANG"
$lang = $APPLICATION->get_cookie("USER_LANG");
    

Данный функционал продолжает работать, но в новых проектах и при разработке на современном D7-рельсе рекомендуется использовать классы и методы из пространства имён Bitrix\Main.

2. Современный способ (ядро D7)

В новом ядре D7 работа с cookie основана на двух основных классах:

  • Bitrix\Main\HttpResponse — для записи cookie.
  • Bitrix\Main\HttpRequest — для чтения cookie.

2.1 Установка cookie

  1. Создаём объект класса Bitrix\Main\Web\Cookie.
  2. Устанавливаем его свойства (имя, значение, срок жизни, домен, безопасный режим и др.).
  3. Добавляем этот объект в HttpResponse.

Пример установки cookie:


use Bitrix\Main\Web\Cookie;
use Bitrix\Main\Application;

// Получаем текущий объект ответа
$response = Application::getInstance()->getContext()->getResponse();

// Создаём cookie "USER_LANG" со значением "ru"
$cookie = new Cookie("USER_LANG", "ru", time() + 86400 * 30); // 30 дней хранения

// Дополнительные настройки (необязательно)
$cookie->setPath("/");        // Путь, на котором cookie доступно
$cookie->setDomain(".mysite.ru"); // Домен (если нужно)
$cookie->setSecure(false);     // Использовать ли https
$cookie->setHttpOnly(true);    // Запретить ли доступ из JS

// Добавляем cookie в ответ
$response->addCookie($cookie);

// Отправляем заголовки (обычно не обязательно вызывать явно, но можно)
$response->flush("");
    

В примере выше мы создали cookie с определёнными параметрами и «привязали» его к ответу. При формировании ответа пользователю сервер отправит нужный заголовок Set-Cookie, и cookie сохранится у клиента.

2.2 Чтение cookie

Для получения cookie в ядре D7 мы пользуемся классом Bitrix\Main\HttpRequest. Чаще всего обращаемся к нему через текущий контекст приложения:


use Bitrix\Main\Application;

// Получаем текущий запрос
$request = Application::getInstance()->getContext()->getRequest();

// Считываем значение cookie "USER_LANG"
$userLang = $request->getCookie("USER_LANG");
    

Полученное значение можно далее использовать, например, чтобы подтянуть нужный язык интерфейса или иные пользовательские настройки.

3. Рекомендации по работе с cookie

  1. Безопасность
    • При работе с важными данными (например, идентификатор авторизованного пользователя) стоит указывать флаг HttpOnly = true и Secure = true. Тогда cookie будет передаваться только по HTTPS, а доступ к нему из JavaScript будет закрыт.
    • Для дополнительной защиты можно использовать механизмы шифрования и/или подписи.
  2. Срок хранения
    • Определяйте срок жизни cookie в зависимости от задачи: от «сессии» (удаляются при закрытии браузера) до конкретной даты или относительного времени хранения.
    • Если cookie содержит критически важные данные, не устанавливайте долгий срок жизни.
  3. Рабочий путь и домен
    • Если cookie необходимо, чтобы было доступно на всём сайте, используйте путь "/" и основной домен.
    • Если нужно ограничить область видимости cookie для конкретного раздела, указывайте соответствующий path.
  4. Отладка и диагностика
    • На сервере (в админке) проверьте, создаётся ли cookie, нет ли конфликтов с заголовками.
    • В браузере (раздел «Хранилище» или «Cookies» в инструментах разработчика) контролируйте, корректно ли установились cookie и правильно ли отправляются на сервер.
  5. Разделение ответственности
    • Помните, что куки — это лишь один из способов хранения данных на клиенте. Иногда целесообразнее применять сессии, localStorage, Redis-сессии и другие инструменты.

4. Пример комплексной реализации

Предположим, вы хотите запомнить язык, выбранный пользователем на сайте, и на всех страницах подставлять корректную локаль.

Установка cookie после выбора языка

(например, при нажатии на переключатель «ru/en»):


use Bitrix\Main\Application;
use Bitrix\Main\Web\Cookie;

$request = Application::getInstance()->getContext()->getRequest();
$response = Application::getInstance()->getContext()->getResponse();

$selectedLang = $request->getPost("lang"); // "ru" или "en"

// Создаём cookie с языком
$cookie = new Cookie("USER_LANG", $selectedLang, time() + 86400 * 30);
$cookie->setPath("/");
$cookie->setHttpOnly(true);

// Добавляем cookie в ответ
$response->addCookie($cookie);
$response->flush("");
    

Чтение cookie

(например, в init.php или в компоненте, где определяется локализация):


use Bitrix\Main\Application;

$request = Application::getInstance()->getContext()->getRequest();
$userLang = $request->getCookie("USER_LANG");

// Если cookie нет, задаём значение по умолчанию
if (!$userLang) {
    $userLang = "ru";
}

// Дальше используем $userLang для подключения правильных языковых файлов и т. д.
    

Таким образом, при следующей загрузке страницы будет автоматически подтягиваться нужный язык.

Заключение

Работа с cookie в 1С-Битрикс легко осваивается, особенно если вы знакомы с общими принципами HTTP-заголовков. В новом ядре D7 всё максимально гибко: вы создаёте объект Cookie, настраиваете его и добавляете к ответу. Считывать cookie так же просто — через HttpRequest.

Если вы переходите со старых проектов на новую версию ядра или создаёте проект «с нуля», рекомендуется пользоваться современным функционалом D7. Это обеспечит лучшую безопасность, удобство и совместимость с актуальными версиями платформы.

Теги:  руководство, D7

Интернет-магазин от 120 000 руб., срок от 4 недель

Платформа для продажи товаров или услуг. Включает интерактивные формы обратной связи в каждой карточке товара, а также множество статичных и динамичных разделов.

Корпоративный сайт от 60 000 руб., срок от 3 недель

Готовый информационный ресурс, включающий лицензию на 1С-Битрикс «Стандарт», технологию «Композитный сайт».

Лендинг от 25 000 руб., срок от 2 недель

Компактный сайт, идеально подходящий для старта. На одной странице можно представить ключевые преимущества вашей компании и разместить форму для обратной связи.