Настраивал Google Tag Manager(GTM), создал переменную тип «Основной файл Cookie».
Предварительно на сайте создал отдельную куку EXMAPLE_COOKIE
.
$cookie = new Bitrix\Main\Web\Cookie("EXMAPLE_COOKIE", 'Y', time() + 3600);
$cookie->setDomain($context->getServer()->getHttpHost());
Заполнил все, как сказано в инструкции Google. Но при отладке, переменная в GTM, в которой должно было приходить значение из cookie сайта EXMAPLE_COOKIE
, была со значением undefined
— т.е. GTM не мог получить значение куки.
Причина проблемы оказалась в том, что httponly
параметр куки установился в true
. Как следствие javascript
GTM не мог извлечь значение.
Почему значение параметра httponly
установилось в true
, ведь я не указывал значение этого параметра и по умолчанию ожидалось поведение функции php setcookie
и значение false
.
Произошло это потому что в конструкторе Bitrix\Main\Web\Cookie
происходит проверка файла settings.php
на секцию с cookies
, пример секции cookies
:
'cookies' =>
array (
'value' => array (
'secure' => false,
'http_only' => true,
),
'readonly' => false,
),
Если её нет, либо нет значения http_only
, то по умолчанию задается true
. Кстати то же самое для параметра secure
, но если его нет в секции cookies
, то false
.
У меня в файле не было секции и я получил true.
Решение проблемы — это добавить:
$cookie->setHttpOnly(false);
Очень интересная статья