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

В данной статье вы познакомитесь с:
- Классическим (устаревшим) способом работы с cookie в 1С-Битрикс.
- Современным (D7) подходом к созданию и получению cookie через классы
Bitrix\Main\HttpResponse
иBitrix\Main\HttpRequest
. - Примерами использования и рекомендациями по работе с 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
- Создаём объект класса
Bitrix\Main\Web\Cookie
. - Устанавливаем его свойства (имя, значение, срок жизни, домен, безопасный режим и др.).
- Добавляем этот объект в
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
- Безопасность
- При работе с важными данными (например, идентификатор авторизованного пользователя) стоит указывать флаг
HttpOnly = true
иSecure = true
. Тогда cookie будет передаваться только по HTTPS, а доступ к нему из JavaScript будет закрыт. - Для дополнительной защиты можно использовать механизмы шифрования и/или подписи.
- При работе с важными данными (например, идентификатор авторизованного пользователя) стоит указывать флаг
- Срок хранения
- Определяйте срок жизни cookie в зависимости от задачи: от «сессии» (удаляются при закрытии браузера) до конкретной даты или относительного времени хранения.
- Если cookie содержит критически важные данные, не устанавливайте долгий срок жизни.
- Рабочий путь и домен
- Если cookie необходимо, чтобы было доступно на всём сайте, используйте путь "/" и основной домен.
- Если нужно ограничить область видимости cookie для конкретного раздела, указывайте соответствующий
path
.
- Отладка и диагностика
- На сервере (в админке) проверьте, создаётся ли cookie, нет ли конфликтов с заголовками.
- В браузере (раздел «Хранилище» или «Cookies» в инструментах разработчика) контролируйте, корректно ли установились cookie и правильно ли отправляются на сервер.
- Разделение ответственности
- Помните, что куки — это лишь один из способов хранения данных на клиенте. Иногда целесообразнее применять сессии, 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. Это обеспечит лучшую безопасность, удобство и совместимость с актуальными версиями платформы.