Битрикс setcookie не работает

попробуйте сначала прописать

Цитата
Ольга Потаева написал:
Сергей Эстрин , а вы побороли эту проблему? Аналогичная ситуация, отвалился $APPLICATION->set_cookie из аякса после обновления до 18.0. Подключение эпилога не спасло, переход на синтаксис D7 не спас.

Важное замечание: запись куки, добавленной через D7, произойдет только при подключении эпилога (там вызывается метод Bitrix\Main\HttpResponse::flush() ) ( https://www.intervolga.ru/blog/projects/d7-analogi-lyubimykh-funktsiy-v-1s-bitriks/#section12 )

https://dev.1c-bitrix.ru/api_d7/bitrix/main/web/cookie/index.php Павел Дорошин 22.02.2017 12:41:49
Если вы будете добавлять cookie через ajax, подключая только prolog_before.php, то обязательно нужно обновить заголовки, иначе cookie на запишутся.

Код
$application = Application::getInstance();
$context = $application->getContext();
$cookie = new Cookie(«TEST», 12, time() + 60*60*24*60); $cookie->setDomain($context->getServer()->getHttpHost());
$cookie->setHttpOnly(false); $context->getResponse()->addCookie($cookie);
$context->getResponse()->flush(«»);

замена
require($_SERVER[‘DOCUMENT_ROOT’].’/bitrix/modules/main/include/prolog_before.php’);
require($_SERVER[‘DOCUMENT_ROOT’].’/bitrix/modules/main/include/prolog_after.php’);
на
require($_SERVER[«DOCUMENT_ROOT»].»/bitrix/header.php»);
require($_SERVER[«DOCUMENT_ROOT»].»/bitrix/footer.php»);

помогло. Кстати, куки в битриксе записывать так

Источник

Пытаюсь установить дополнительную куку пользователю, но кука не ставиться, проверил на другом сайте при тех же условиях, то все норм ставиться и читается. В чем может быть проблема ? Даже такой простой код не работает

и в массиве с куками нет куки с нужным мне ключом, подскажите как можно решить этот трабл ?

и странно то, что еще и просто через не ставиться кука, у сайта несколько алиасов, пока даже мыслей нет в чем может быть дело.

  • Вопрос задан более трёх лет назад
  • 2779 просмотров

Cookie станут видимыми только после перезагрузки страницы, для которой они должны быть видны. Для проверки, правильно ли cookie установились, проверьте их при следующей загрузке страницы до истечения срока их действия. Срок действия cookie задается в параметре expire. Удобно проверять существование cookie простым вызовом print_r($_COOKIE);.

Срок действия cookie задается в параметре expire.

Вы, надеюсь, понимаете как работают куки? Почему бы вам в браузере не посмотреть что приходит с сервера и что отправляется туда?

замена
require($_SERVER[‘DOCUMENT_ROOT’].’/bitrix/modules/main/include/prolog_before.php’);
require($_SERVER[‘DOCUMENT_ROOT’].’/bitrix/modules/main/include/prolog_after.php’);
на
require($_SERVER[«DOCUMENT_ROOT»].»/bitrix/header.php»);
require($_SERVER[«DOCUMENT_ROOT»].»/bitrix/footer.php»);

помогло. Кстати, куки в битриксе записывать так

$APPLICATION->set_cookie(«favorites»,serialize($arElements), time()+60*60*24*30*12*2, «/»);
$APPLICATION->get_cookie(‘favorites’)
еще доступны так

Источник

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

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

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

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

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

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

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

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

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

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

Источник

Не устанавливаются куки BITRIX_SM_. при авторизации

Добрый день.
Делаю авторизацию на сайте. Точнее, копирую готовый функционал с другого сайта (на другом хостинге), правда, там старая версия BITRIX (14) и php 5.6, а тут последняя (20, пока без лицензии) и php 7.4.
В общем, авторизация работает, но не продлевается, даже при включённых настройках «Разрешить запоминание авторизации», «Использовать защищенное хранение авторизации в cookies», «Распространять авторизацию на все домены». (пробовал разные вариации настроек)
Для авторизации используется кастомный функционал, который авторизует по проверочному коду, высылаемому в SMS. Т.е. человек указал свой номер телефона, битрикс проверяет наличие пользователя с этим номером и высылает смс с кодом для подтверждения. После ввода корректного кода срабатывает функция: CUser::Authorize($ID,true) . Без ajax-а.
Обращаю внимание, что второй параметр функции установлен на true и по идее он отвечает за включение сохранения авторизации. Но этого не происходит.
Пробовал заменить эту функцию и вручную авторизовать пользователя по CUSER::Login($LOGIN,$PASSWORD,»Y») , третий параметр которой так же отвечает за сохранение авторизации, но эффекта тоже нуль.
Обратил внимание, что при авторизации не устанавливаются cookie из серии BITRIX_SM_. в частности, BITRIX_SM_LOGIN, BITRIX_SM_UIDH — которые, как раз за это и отвечают. Однако, бесполезная BITRIX_SM_SOUND_LOGIN_PLAYED устанавливается. Что очень странно.
Функция $USER->SavePasswordHash(); , которая по идее должна записывать эти куки вручную, ничего тоже не записывает.

Возможно, кто-нибудь сталкивался с этой ситуацией? Подскажите, куда копать? Я склоняюсь к мысли, что, вероятно, настройки php/сервера мешают сохранять нужные cookies.

Источник

Битрикс setcookie не работает

Добрый день! Вот решил поделиться своим открытием насчёт функции Setcookie в PHP. При генерации страницы мне нужно чтобы у клиента установился определённое значение в cookie. Поковырявшись с Setcookie и убедившись что оно не работает, я обычно бросал это неблагодарное дело и пользовался JavaScript`ом, однако если у клиента отключены скрипты, то такой фокус не прокатит. Так почему же Setcookie не работает?

В основном это две причины: очевидная и не очень.

Очевидная причина:

Как пишут нам в инструкции cookie должны передаваться до того как будут выведены какие-либо другие данные скрипта (это ограничение протокола). Это значит, что в скрипте вызовы этой функции должны располагаться прежде остального вывода, включая вывод тэгов и , а также пустые строки и пробельные символы.

Да, это очень важное замечание, поскольку, проигнорировав его, вы получите сообщение об ошибке следующего содержания: Cannot modify header information — headers already sent by (output started at. Типа невозможно изменить заголовки страницы, так как они уже были отправлены.

В той же инструкции приведён пример использования функции Setcookie на PHP:

Однако, выполнение такого php-скрипта на сервере — привело к ошибкам:

Warning: Cannot modify header information — headers already sent by (output started at Z:\. \test.php:1) in Z:\. \test.php on line 4

Warning: Cannot modify header information — headers already sent by (output started at Z:\. \test.php:1) in Z:\. \test.php on line 5

Warning: Cannot modify header information — headers already sent by (output started at Z:\. \test.php:1) in Z:\. \test.php on line 6

Как же так. Ведь это пример с официального сайта! Вот тут-то виновата вторая — не очевидная причина.

Не очевидная причина:

Очень просто — кодировка php-файла должна быть UTF-8 без BOM

Источник

Читайте также:  Пылесос сломался через месяц после покупки что делать
Оцените статью