После вызова CUSER->Authorize в моём случае происходило перенаправление на другую страницу функцией header("Location:............"). Оказалось, что использование этой функции мешает правильной записи заголовков bitrix и установке необходимых cookies. Если использовать редирект с помощью встроенной функции LocalRedirect() или после вызова header("Location:...") вызвать конструкцию \Bitrix\Main\Context::getCurrent()->getResponse()->writeHeaders(); , то cookies корректно запишутся. Спасибо большое @smilingcheater https://qna.habr.com/q/882347?e=10287861#comment_2521809
Добрый день. Делаю авторизацию на сайте. Точнее, копирую готовый функционал с другого сайта (на другом хостинге), правда, там старая версия 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.
Решил проблему следующим образом: 1. Почистил кеш компонента, который не работал и кеш других компонентов, вызывающихся на этой странице 2. Дважды протыкал (создать/редактирова элементы) каждый из компонентов. Если форма добавления/редактирования элементов загрузилась хорошо, то и форма параметров компонента должна прогружаться.
Я сам не верю, что именно это помогло, но других объяснений нет. Либо это, либо чудо. Может быть кому-то и поможет.
Решил проблему следующим образом: 1. Почистил кеш компонента, который не работал и кеш других компонентов, вызывающихся на этой странице 2. Дважды протыкал (создать/редактирова элементы) каждый из компонентов. Если форма добавления/редактирования элементов загрузилась хорошо, то и форма параметров компонента должна прогружаться.
Я сам не верю, что именно это помогло, но других объяснений нет. Либо это, либо чудо. Может быть кому-то и поможет.
UPD через 5 минут: и снова перестало работать. Причем перестало работать с полным бардаком в коде после сохранения страницы.
Евгений Жуков пишет: Если товары у Вас уникальны, включите для них количественный учет, задайте количество, равное 1 и запретите покупку при отсутствии товара. Больше ничего делать не потребуется.
Хорошо, а что в таком случае будет при добавлении товара в корзину, если он уже есть там? Какая "реакция" Битрикса будет на это?
Решением моей задачи может быть внедрение этого кода (обновление количества товара до 1) при добавлении в корзину. Но не хочется делать проверки каждый раз. Может быть есть какое-нибудь более глобальное действие, которое бы задавало это везде, вне зависимости, каким методом и откуда я добавляю товары в корзину.
При добавлении в корзину позиции, которая уже есть в ней, увеличивается её количество. А что, если товары уникальны и у них нет такого понятия, как количество? Т.е., техническим языков, максимальное количество = 1. Может быть есть какая-нибудь настройка, отвечающая за включение такого режима работы корзины? Не могу найти в админке...
Алгоритм работы следующий: если добавляешь товар в корзину (метод добавления не важен), происходит не увеличение количества, а просто проверка на присутствие этой позиции в корзине. И если она присутствует, то выдаётся сообщение о том, что товар уже в корзине.
Возникла такая же ошибка при загрузке страниц редактирования в виде HTML (адреса вида bitrix/admin/fileman_html_edit.php?path=...) Воспользовался советом Stawr, проблема решилась.
Цитата
Установите параметр pcre.recursion_limit в файле php.ini равным 600
Разработчикам на заметку, если работаете не только с Битрикс, но и с другими cms, создайте отдельные версии файлов php.ini для каждой капризной cms, которая требует своих настроек php. У меня, например, 2 файла php.ini - для bitrix и joomla (и всех остальных). Когда сажусь за очередной bitrix-сайт, запускаю Denwer в "bitrix-режиме". Иначе пользуюсь второй версией php.ini