Цель: Разобраться, какие 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 на вашем проекте

  1. Откройте сайт и вызовите DevTools: F12.
  2. Перейдите в Application → Storage → Cookies (или «Хранилище → Cookies»).
  3. Проверьте имя, домен, срок жизни, флаги Secure, HttpOnly, SameSite.

3. Работа с cookies в Битрикс (PHP)

<?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(); // если устанавливаете до вывода шаблона 
<?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 и подключайте трекинг только после согласия пользователя.