Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Kuki: Руководство разработчика». Вы узнаете экспертные методики работы с kuki и научитесь избегать типичных ошибок начинающих разработчиков.
—
title: Cookie-файлы
—
Для работы с файлами cookie предназначен класс Bitrix\Main\Web\Cookie. Он позволяет создавать cookie с такими параметрами, как имя, значение, срок действия и путь.
Как установить cookie
Чтобы задать cookie, используйте класс Bitrix\Main\HttpResponse.
1. Импортируйте классы Cookie и Context.
use Bitrix\Main\Web\Cookie;
use Bitrix\Main\Context;2. Создайте объект cookie. Укажите имя, значение и срок действия cookie.
$cookie = new Cookie("example_cookie", "cookie_value", time() + 3600); // действует 1 час3. Настройте параметры cookie. При необходимости задайте домен, путь, флаги безопасности и доступности.
$cookie->setDomain("example.com");
$cookie->setPath("/");
$cookie->setSecure(false); // true, если нужно передавать только по HTTPS
$cookie->setHttpOnly(true); // доступ только через HTTP4. Добавьте cookie в ответ. Используйте объект ответа текущего контекста, чтобы добавить созданный cookie.
$response = Context::getCurrent()->getResponse();
$response->addCookie($cookie);Когда вы добавляете cookie в ответ, они отправляются клиенту и сохраняются у него. Однако сервер сможет прочитать эти файлы cookie только при следующем запросе клиента, так как текущий запрос их еще не получил.
Как получить cookie
Чтобы получить cookie, используйте класс Bitrix\Main\HttpRequest.
1. Получите объект запроса. Используйте текущий контекст для доступа к запросу.
use Bitrix\Main\Context;
$request = Context::getCurrent()->getRequest();2. Извлеките значение cookie. Используйте метод getCookie объекта запроса, указав имя cookie.
$cookieValue = $request->getCookie("example_cookie");
// Проверка наличия и вывод значения
if ($cookieValue !== null) {
echo "Значение cookie: " . $cookieValue;
} else {
echo "Cookie не найдено.";
}Методы для работы с cookie
Домен
$cookie->setDomain('example.com'); // установить cookie для домена 'example.com'
$cookie->getDomain(); // получить домен, который был установлен для cookieСрок действия
$cookie->setExpires(time() + 3600); // установить время истечения cookie через 1 час
$cookie->getExpires(); // получить время истечения cookieДоступность через HTTP
$cookie->setHttpOnly(true); // установить доступность cookie только через HTTP-протокол
$cookie->getHttpOnly(); // получить текущее значение флага HttpOnly для объекта cookie. Флаг указывает, доступна ли cookie только через HTTP-протоколИмя
$cookie->setName('session_id'); // установить имя cookie 'session_id'
$cookie->getName(); // получить имя cookieПуть
$cookie->setPath('/'); // установить путь на сервере, для которого будет доступна cookie
$cookie->getPath(); // получить путь, который был установлен для cookieПередача по HTTPS
$cookie->setSecure(true); // установить флаг Secure для cookie. Он указывает, что cookie передается только по HTTPS
$cookie->getSecure(); // получить текущее значение флага Secure для cookie. Метод возвращает true или false, которое указывает, передается ли cookie только по HTTPSЗначение
$cookie->setValue('abc123'); // установить значение abc123 для cookie
$cookie->getValue(); // получить текущее значение, хранящееся в cookieАтрибут SameSite
$cookie->setSameSite('Lax'); // установить атрибут SameSite для cookie, он определяет политику отправки cookie в кросс-сайтовых запросах
$cookie->getSameSite(); // получить текущее значение атрибута SameSite для cookieРабота с cookie через AJAX
Чтобы добавить cookie через AJAX, используйте следующие примеры:
use Bitrix\Main\Application;
use Bitrix\Main\Web\Cookie;
$application = Application::getInstance();
$context = $application->getContext();
$cookie = new Cookie('filter__city', 'Granada', time() + 60*60*24*60);
$cookie->setDomain($context->getServer()->getHttpHost());
$cookie->setHttpOnly(false);
$context->getResponse()->addCookie($cookie);
$context->getResponse()->flush('');Файл /local/ajax/set_cookie.php:
<?php
require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php";
use Bitrix\Main\Application;
use Bitrix\Main\Web\Cookie;
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_POST['ACTION'] === 'selectMyCity') {
$APPLICATION->RestartBuffer();
header('Content-Type: application/json');
$response = ['STATUS' => 'ERROR', 'MESSAGE' => 'Не удалось добавить cookie'];
if (check_bitrix_sessid()) {
$city = $_POST['city'];
$application = Application::getInstance();
$context = $application->getContext();
$cookie = new Cookie('filter__city', $city, time() + 60*60*24*30);
$cookie->setDomain($context->getServer()->getHttpHost());
$cookie->setHttpOnly(false);
$context->getResponse()->addCookie($cookie);
$response = ['STATUS' => 'SUCCESS', 'MESSAGE' => 'Cookie успешно добавлена'];
}
echo json_encode($response);
Application::getInstance()->end();
}Файл set_cookie.js:
function setCityCookie(city) {
const xhr = new XMLHttpRequest();
xhr.open("POST", "/local/ajax/set_cookie.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatecha nge = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
const response = JSON.parse(xhr.responseText);
if (response.STATUS === 'SUCCESS') {
console.log("Cookie установлена успешно");
} else {
console.error("Ошибка установки cookie: " + response.MESSAGE);
}
}
};
const params = `ACTION=selectMyCity&city=${encodeURIComponent(city)}&sessid=${BX.bitrix_sessid()}`;
xhr.send(params);
}Шифрованные cookie
Шифрованные cookie \Bitrix\Main\Web\CryptoCookie позволяют передавать данные пользователю без раскрытия их содержимого и без изменения. Доступно с версии Главного модуля 20.5.400.
Конфигурация
Для шифрования данных ядром необходимо указать crypto_key в файле настроек /bitrix/.settings.php. В новых дистрибутивах он генерируется автоматически.
Если ключ отсутствует, добавьте его вручную:
<?php
return [
//...
'crypto' => [
'value' => [
'crypto_key' => 'mysupersecretphrase',
// рекомендуется использовать 32-символьную строку из a-z0-9
],
'readonly' => true,
]
//...
];Примеры
1. Установка cookie. Чтобы установить шифрованные cookie, создайте объект и добавьте его в нужный Response:
$cookie = new \Bitrix\Main\Web\CryptoCookie('someName', 'secret value');
\Bitrix\Main\Context::getCurrent()->getResponse()->addCookie($cookie);Если значение cookie превышает допустимую длину, ядро создаст несколько cookie для хранения зашифрованного значения.
2. Чтение сookie. Для получения расшифрованного значения используйте стандартное API ядра:
$httpRequest = \Bitrix\Main\Context::getCurrent()->getRequest();
echo $httpRequest->getCookie('someName');
// secret valueЯдро автоматически определяет, зашифрованы ли cookie, и дешифрует их. Если расшифровка не удалась, возвращается пустое значение.
💡 Экспертное мнение и рекомендации
Советы эксперта по интеграции:
- Всегда используйте кэширование при частых запросах к kuki, чтобы разгрузить базу данных.
- Соблюдайте стандарты PSR при написании обработчиков для «Kuki: Руководство разработчика».
- Регулярно проводите аудит производительности системы с помощью встроенного монитора 1С-Битрикс.
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru