Проблема с куками в bitrix

Работа с cookie в init.php bitrix. Неправильно записывается информация в куки

Решение проблемы с работой cookie в init.php в bitrix. Неправильно работают cookie в bitrix в файле init.php

Недавно я работал в куками в bitrix и столкнулся со следующей проблемой — куки создавались, но при обновление слетали, при этом в браузере файлы cookie были записаны, но со значением «null», тип значения строка.

В моей задаче был следующий сценарий:

  1. В файле init.php я прописал функцию которая делает запрос к БД если куки не созданы. В случае если куки были созданы, то достаём значение из файлов cookie.
  2. В footer.php, после полной прогрузки страницы, записываются значения в cookie

Для то чтобы мне проверить созданы cookie или нет, мне нужно было в файле init.php получить эти cookie, я прописываю функцию, которая проверяет наличие куки файлов и делает запрос если их нет:

function myFunc() {
   /* ПОЛУЧАЕМ КУКИ ФАЙЛЫ ДЛЯ ПРОВЕРКИ */
   $request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest()
   $infoCookie = $request->getCookie("MY_COOKIE");

   if(!$infoCookie) {
      /* делаем запрос если куки файлов НЕТ */
   }
   else {
      /* используем куки файлы */
   }
}

В файле footer.php я прописываю код на создание куки файлов.

И здесь мы приходим к решению моей проблемы…

Когда я делаю запрос на наличие куки файлов в файле init.php, мне приходит результат что куки файлов нет и одновременно создаются куки файлы со значение null. Поэтому решением данной проблемы будут дополнительная проверка куки файлов в footer.php, перед созданием новых куки.

Там мы будем проверять куки на пустоту и на строковое значение «null» (ИМЕННО СТРОКОВОЕ ЗНАЧЕНИЕ). В случае если значение ровно строке «null» мы так же создаём новые куки.

/* проверяем существуют ли cookie */
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
$infoCookie = $request->getCookie("MY_COOKIE");
$infoCookie = json_decode($infoCookie);

/* создаём куки если их нет или если они ровны "null" */
if(!$infoCookie || $infoCookie != "null") {
    /* массив собираем в init.php */
    $infoContent = myFunc();

    \Bitrix\Main\Context::getCurrent()->getResponse()->addCookie(
        new \Bitrix\Main\Web\Cookie("MY_COOKIE", $infoContent)
    );
}

Таким образом я решил свою проблему. После второй перезагрузки страницы, у вас должно всё нормально отрабатывать и куки будут записываться как положено.

На этом всё!
Если у вас есть вопросы, пишите их в нашей группе - https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - https://vk.com/prog_time
В ней мы делимся своим опытом с другими начинающими программистами, поэтому обязательно ответим на ваш вопрос.
Так же прокачивайте свои навыки на нашем канале - https://www.youtube.com/c/ProgTime