После входа в аккаунт пропадают товары из корзины на 1С-Битрикс: что проверить
Покупатель добавил товары, вошёл в аккаунт — и корзина опустела. Разбираем привязку корзины, cookies, домен, форму входа и проверку объединения товаров после авторизации.
Покупатель выбрал товары, открыл корзину и вошёл в аккаунт перед оформлением заказа. Вместо выбранных позиций он увидел сообщение «Ваша корзина пуста». Повторное добавление иногда помогает, но магазин уже заставил клиента выполнять одну работу дважды.
В такой ситуации важно установить, что произошло с товарами: записи удалились, остались у прежнего покупателя или сохранились, но не попали в интерфейс. Ниже — порядок диагностики перехода от гостя к авторизованному пользователю и сценарии проверки исправления. Примеры условные: они не описывают статистику конкретного магазина.

1. Зафиксируйте момент, когда корзина становится пустой
Начните с короткого воспроизводимого сценария. В отдельном профиле браузера добавьте один доступный товар с конкретным вариантом, например размером, и запишите количество. Откройте полную страницу корзины, затем войдите через ту же форму, которой пользуется клиент. Зафиксируйте адреса до и после входа и результат после обычного обновления страницы.
Один товар удобнее десятка: сразу видно, сохранился ли нужный вариант и не превратились ли две единицы в одну. Если проблема проявляется только с отдельным аккаунтом, его прежняя корзина становится частью условий воспроизведения. Проверка под администратором не заменяет проверку под обычным покупателем.
- Исчезли только число или сумма в шапке. Откройте полную корзину: маленький виджет может показывать устаревшее состояние.
- Пусто сразу после входа, но товары возвращаются после обновления. Сопоставьте ответы запросов и порядок перерисовки интерфейса.
- Проблема есть только при регистрации. Проверьте создание аккаунта и последующий вход как отдельную цепочку.
- Товары исчезают при переходе на другой адрес. Запишите, меняются ли домен, поддомен, протокол или сайт в многосайтовой установке.
Не начинайте с очистки cookies в проблемном браузере: она изменит исходные условия. Сначала сохраните последовательность действий и время сбоя, затем сравните с новым профилем. Записи сетевых запросов и журналы передавайте разработчику с удалёнными паролями, токенами и значениями сессионных cookies.
2. Отделите проблему отображения от потери данных
Разработчику нужно сравнить три уровня: состав корзины на сервере, ответ запроса корзины и то, что отрисовал браузер. Сообщение «пусто» само по себе не показывает, на каком уровне произошёл сбой. Нужен один и тот же тестовый покупатель, товар и момент времени.
| Что обнаружено | Следующий шаг |
|---|---|
| В полной корзине товары есть, в шапке — ноль | Проверить обновление виджета после входа и источник его данных |
| Сервер вернул позиции, но список на странице пуст | Проверить JavaScript, шаблон и порядок завершения запросов |
| Записи остались у гостевого покупателя | Проследить привязку и перенос корзины при авторизации |
| Записи есть у текущего покупателя, но не попали в выборку | Проверить сайт, связь с заказом, доступность и отложенные позиции |
| Записи действительно удалены | Найти запрос или обработчик, который изменил состав, по журналу тестового прохода |
Если после входа количество сохранилось, а изменилась только стоимость, это другой симптом. Для него есть отдельная статья о расхождении цены в карточке и корзине. Здесь основная контрольная величина — состав: варианты товара, свойства позиции и количество.

3. Проверьте привязку корзины при входе
В Битриксе идентификатор учётной записи и идентификатор покупателя корзины — разные сущности. Класс Fuser возвращает идентификатор покупателя. Нельзя подставлять обычный ID пользователя туда, где ожидается FUSER_ID, только потому, что оба значения — числа.
В документации D7 загрузка текущей корзины учитывает покупателя и сайт. Корзина оформленного заказа рассматривается отдельно. Поэтому при диагностике нужно сопоставить покупателя до и после входа, идентификатор сайта и принадлежность позиций заказу. Для оставшихся записей также проверяют признаки доступности к покупке и отложенного товара.
Само изменение FUSER_ID после входа ещё не доказывает ошибку. Проверять следует результат: куда попали выбранные позиции и какая корзина теперь загружается. Если в аккаунте уже были сохранены товары, разработчик должен проследить обе исходные корзины и итоговый состав.
Например, гость добавил две единицы одного варианта, а в аккаунте уже лежала ещё одна. До исправления согласуйте ожидаемое правило объединения для этого магазина. Затем проверьте результат на одинаковых позициях и отдельно на разных размерах, цветах и дополнительных свойствах. Нельзя считать две строки одинаковыми только по названию товара.
В журнале тестового прохода достаточно фиксировать этап, время, идентификаторы покупателя и сайта, состав тестовых позиций и результат операции. Это позволит увидеть, когда появляется новая пустая корзина, какая выборка выполняется после входа и не повторяется ли объединение при каждом запросе.
Не переносите строки между покупателями прямым SQL и не вызывайте обработчик объединения повторно «на всякий случай». Сначала нужно понять штатный путь авторизации и доработки проекта. Иначе исправление одного прохода может создать дубли или нарушить корзину другого аккаунта.
4. Сопоставьте cookies, адрес сайта и работу формы входа
Проверьте адреса добавления товара, авторизации и загрузки корзины. Внешне переход с www.example.ru на example.ru может выглядеть незаметно. Для cookies область действия имеет значение: атрибуты Domain и Path определяют, на какие адреса браузер их отправляет. Эти правила описаны в документации Set-Cookie.
В инструментах браузера сравните cookies у конкретных запросов до и после входа. Проверьте, не записываются ли одноимённые cookies с разными областями действия. Для входа через внешний сервис дополнительно проследите возвращение на сайт и ограничения SameSite. Изменять эти параметры нужно по найденной причине: отключение защитных атрибутов не является универсальным исправлением корзины.
Если корзина теряется только во всплывающем окне входа, сравните его поведение со штатной страницей авторизации. Успешный HTTP-ответ ещё не означает, что сервер действительно авторизовал пользователя и завершил нужные действия. Проверьте содержание ответа, следующий запрос и фактическое состояние покупателя.
- Запросы выполняются одновременно. Корзина может запрашиваться до окончания авторизации. Проверьте, какой ответ последним заменяет содержимое блока.
- Форма ведёт на другой адрес или сайт. Сопоставьте редиректы, cookies и контекст обработки запросов.
- Только часть интерфейса осталась в гостевом состоянии. Проверьте обновление полной корзины, виджета в шапке и страницы оформления заказа.
- Проблема появилась после доработки входа. Сравните изменённый обработчик со штатным сценарием на тестовой копии.
Кеширование проверяйте адресно. Если ответ содержит правильные товары, но пользователь видит старый блок, исследуйте его обновление и кеш. Если запрос уже возвращает чужой контекст или пустую выборку, одна очистка кеша не объяснит причину. В результатах диагностики должно быть указано конкретное место сбоя, а не только факт временного улучшения.
5. Примите исправление по контрольным сценариям
Подготовьте тестовую копию, два обычных тестовых аккаунта и несколько доступных вариантов товара. В одном аккаунте заранее сохраните корзину, другой оставьте пустым. Зафиксируйте исходный состав и ожидаемое правило объединения. Для проверки сохранности корзины достаточно дойти до оформления; создавать боевой заказ и проводить оплату не требуется.
| Сценарий | Ожидаемый результат |
|---|---|
| Гость добавляет товар и входит в аккаунт с пустой корзиной | Вариант и количество сохранены |
| Вход в аккаунт с ранее сохранёнными товарами | Обе исходные корзины учтены по согласованному правилу |
| Одинаковый вариант есть у гостя и в аккаунте | Количество соответствует правилу, неожиданных дублей нет |
| Выбраны разные размеры, цвета или свойства позиции | Различия сохранены, варианты не склеились в одну строку |
| Регистрация с товарами в гостевой корзине | После предусмотренного входа выбранные позиции доступны |
| Вход через страницу, окно и телефон | Во всех предусмотренных формах получен одинаковый итог |
| Обновление страницы и повторный визит в том же профиле | Состав не сбрасывается и не умножается повторной обработкой |
| Выход из первого аккаунта и вход во второй | Приватная корзина первого аккаунта не раскрывается второму |
| Переход из корзины к оформлению заказа | Выбранные позиции и количества совпадают; ограничения показаны явно |

Повторите исходный сбой после исправления и сохраните короткий протокол: условия, действия, ожидаемый и фактический состав. Если часть товара за время проверки стала недоступной, это должно быть объяснено в интерфейсе; молчаливое исчезновение нельзя засчитывать как корректный результат.
Для исправления ошибки на сайте полезно сразу прислать адрес магазина, способ входа, последовательность действий, время сбоя и сведения о недавних изменениях. Если корзина, авторизация и оформление дорабатывались разными исполнителями, технический аудит Битрикс поможет восстановить общую картину. После исправления эти сценарии стоит включить в регулярную поддержку интернет-магазина.
Частые вопросы
Если после обновления страницы товары вернулись, данные в безопасности?
Это признак возможной проблемы интерфейса, но не окончательное доказательство. Сравните серверный состав и ответы запросов на каждом шаге. Также проверьте переход к оформлению заказа: он может использовать другой запрос или компонент.
Достаточно попросить клиента очистить cookies?
Нет. Новый профиль помогает сравнить условия, но не устраняет причину и может лишить гостя связи с прежней корзиной. Сначала нужно зафиксировать сбой и понять, почему магазин перестаёт узнавать покупателя или загружает другие данные.
Почему при проверке под администратором всё работает?
У администратора другие права и история сессии; он может обходить часть пользовательского пути. Проверяйте обычный аккаунт с теми же условиями, что у клиента: способом входа, адресом сайта и заранее сохранёнными товарами.
Можно ли исправить проблему одним готовым фрагментом кода?
Общий фрагмент без диагностики не определит, теряются ли записи, меняется ли привязка или неправильно обновляется экран. Исправление выбирают после сравнения этих состояний, затем проверяют сохранность состава и разделение корзин разных аккаунтов.
Нужно оценить задачу по сайту?
Опишите, что нужно изменить, приложите ссылку на страницу и удобный способ связи. Я посмотрю задачу и подскажу, с чего лучше начать.