Цель: Разобраться, какие cookies использует 1С-Битрикс на типовом проекте, и показать, как их просматривать, создавать, читать и удалять безопасно.
1. Базовые cookies ядра Битрикс
Обязательные технические
PHPSESSID— идентификатор сессии PHP (авторизация, корзина, сообщения об ошибках).BITRIX_SM_LOGIN— сохранение логина для автоподстановки в форме входа.BITRIX_SM_UIDH— «запомнить меня» (долгая авторизация).BITRIX_SM_SALE_UID— связь гостя/пользователя с корзиной и заказами (модуль Интернет-магазин).BX_USER_ID— анонимный идентификатор посетителя (статистика/аналитика Битрикс).
Cookies модулей и внешней аналитики
Зависят от подключённых интеграций:
BITRIX_CONVERSION_CONTEXT_s1— модуль «Конверсии»._ym_uid,_ym_d,_ym_isad— Яндекс.Метрика._ga,_gid,_gat— Google Analytics._fbp— Meta/Facebook Pixel.directCrm-session— CRM/ремаркетинг.
2. Где посмотреть cookies на вашем проекте
- Откройте сайт и вызовите DevTools: F12.
- Перейдите в
Application → Storage → Cookies(или «Хранилище → Cookies»). - Проверьте имя, домен, срок жизни, флаги Secure, HttpOnly, SameSite.
3. Работа с cookies в Битрикс (PHP)
Установка cookie (рекомендуемый способ через API)
<?php
use Bitrix\Main\Web\Cookie;
use Bitrix\Main\Application;
use Bitrix\Main\Context;
\$context = Context::getCurrent();
\$request = \$context->getRequest();
\$response = \$context->getResponse();
\$ttl = 60 \* 60 \* 24 \* 30; // 30 дней
\$expires = time() + \$ttl;
\$cookie = new Cookie('CITY', 'kazan', \$expires);
\$cookie->setHttpOnly(true);
\$cookie->setSecure(\$request->isHttps()); // включайте только на HTTPS
\$cookie->setDomain(\$request->getHttpHost()); // при необходимости укажите .example.ru
\$cookie->setPath('/'); // доступно на всём сайте
\$cookie->setSameSite(Cookie::SAMESITE\_LAX); // Lax/Strict/None
\$response->addCookie(\$cookie);
\$response->flush(); // если устанавливаете до вывода шаблона
Чтение cookie
<?php
use Bitrix\Main\Context;
\$value = (string) Context::getCurrent()->getRequest()->getCookie('CITY');
if (\$value !== '') {
// использовать значение
}
Удаление (истечение в прошлом)
<?php
use Bitrix\Main\Web\Cookie;
use Bitrix\Main\Context;
\$response = Context::getCurrent()->getResponse();
\$cookie = new Cookie('CITY', '', 1); // 1 = прошедшая дата
\$cookie->setPath('/');
\$response->addCookie(\$cookie);
Быстро через стандартный PHP
<?php
setcookie('CITY', 'kazan', [
'expires' => time() + 86400 * 30,
'path' => '/',
'domain' => $_SERVER['HTTP_HOST'],
'secure' => isset($_SERVER['HTTPS']),
'httponly' => true,
'samesite' => 'Lax',
]);
4. Работа с cookies в браузере (JS)
Чтение/запись простых значений
// Установка (простая)
document.cookie = "CITY=kazan; Max-Age=" + 60*60*24*30 + "; Path=/";
// Чтение
const cookies = Object.fromEntries(
document.cookie.split('; ').map(p => p.split('=')));
console.log(cookies.CITY || '');
Надёжное сохранение с учётом HTTPS и SameSite
const maxAge = 60*60*24*30; // 30 дней
const isHttps = location.protocol === 'https:';
document.cookie =
"CONSENT=accepted; Path=/; Max-Age=" + maxAge +
(isHttps ? "; Secure; SameSite=Lax" : "; SameSite=Lax");
5. Баннер согласия и отложенная загрузка аналитики
Минимальный пример
<div id="cookie-banner" class="cookie-banner">
Мы используем cookies. <button id="cookie-accept">Согласен</button>
</div>
<script>
(function(){
if (document.cookie.includes('CONSENT=accepted')) {
loadAnalytics(); return;
}
document.getElementById('cookie-banner').style.display = 'block';
document.getElementById('cookie-accept').addEventListener('click', function(){
var maxAge = 60*60*24*180; // 6 месяцев
document.cookie = "CONSENT=accepted; Path=/; Max-Age="+maxAge+"; SameSite=Lax"+(location.protocol==="https:"?"; Secure":"");
document.getElementById('cookie-banner').remove();
loadAnalytics();
});
function loadAnalytics(){
// сюда подключаем Метрику/GA только после согласия
// пример: динамически создаём <script> и вставляем его в DOM
}
})();
</script>
6. Чек-лист безопасности и соответствия
- Устанавливайте флаги HttpOnly и Secure для чувствительных идентификаторов.
- Подбирайте SameSite: Lax для обычных сценариев, Strict для повышения защиты, None (только с Secure) для межсайтовых интеграций.
- Не храните персональные данные прямо в cookie — используйте ID и серверные сессии.
- Опишите категории и сроки хранения в «Политике cookie», дайте возможность изменить выбор.
7. Диагностика на проекте
Вывести все cookies в лог (PHP)
<?php
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/bitrix/log.txt',
"[".date('c')."] COOKIES: ".print_r($_COOKIE, true).PHP_EOL,
FILE_APPEND
);
Быстрый просмотр в браузере (JS)
console.table(
document.cookie.split('; ').map(p => {
const [name, value] = p.split('=');
return { name, value };
})
);
Итог: на любом проекте 1С-Битрикс присутствуют системные cookies ядра (сессия, авторизация, корзина) и опционально — от модулей/аналитики. Управляйте ими через API
Bitrix\Main\Web\Cookie, соблюдайте флаги Secure, HttpOnly, SameSite и подключайте трекинг только после согласия пользователя.