Настраивал 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);
Очень интересная статья