Поведение целиком и полностью аналогично описанию https://tokmakov.msk.ru/blog/item/184 Цитата "В итоге, если «пользователь Иванов», авторизуется снова (на другом компьютере или в другом браузере), то его корзина будет пуста. Т.е. «пользователь Петров» приобрёл корзину «пользователь Иванов». Если «пользователь Иванов» и «пользователь Петров», работают за разными компьютерами, то ситуации переноса корзины от одного пользователя другому никогда не произойдёт, соответственно проблему у покупателей быть не должно." Так что все-таки в FUSER_ID дело. Я и по таблицам в базе следил и глазами видел как фузеры перезжают.
Закоментил код в файлах app/bitrix/modules/sale/lib/fuser.php app/bitrix/modules/sale/lib/internals/fuser.php app/bitrix/modules/sale/lib/discount/context/fuser.php
Но в таблицу b_sale_fuser все равно добавляется запись о новом fuser_id для пользотателя, зашедшего в каталог! Как? Где? Метод класса по запись в БД заблокирован!
Ухаха, ухаха, оказывается у класса Fuser есть класс-клон CSaleUser. Что за прикол такой!?? Это не смешно! Хе-хе, а еще есть CAllSaleUser))). Ах даа, старое и новое ядро...
Ситуация с новым ядром конечно да... Вот есть старые классы CSaleUser и CAllSaleUser. Сделали новый класс Fuser. Хорошо, но какого извините фига новый класс использует методы старых!???? А эти комментарии //TODO конечно доставляют)) где-то видел коммент говорящий переделать текущий метод под D7. Интересно, а в целом почему класс нового ядра использует методы старого?? Отказ от глобальных переменных там... от global $USER например.
В общем удалось наконец-то добиться нормальной работы. Пришлось кастрировать классы Fuser, CSaleUser и CAllSaleUser в части работы с куками и присвоения FUSER_ID неавторизованным пользователям. Теперь все зашибись, ни одна корзина более не уедет к чужому юзеру.
Кое-что нашел... https://idea.1c-bitrix.ru/31133/ "В модуле sale есть класс CAllSaleUser, который содержит функцию OnUserLogin(). Она вызывается при логине пользователя. При этом она же принудительно перекидывает всю заполненную корзину вновь залогиненному пользователю. Это хорошо работает, когда корзина набирается без регистрации, а затем пользователь входит в свой аккаунт, сохраняя при этом собранную корзину. И в то же время это работает совершенно непредсказуемо, когда пользователь перелогинивается - при этом корзина у одного пользователя целиком сливается с его текущей корзиной без какой бы то ни было возможности вернуть все обратно.
Пару лет назад мы нашли решение данной проблемы, полностью отключив трансфер корзин. Однако сделано это в ядре, и при обновлении обычно изменения затираются, что и логично. Было бы неплохо вынести трансфер в отдельную настройку, чтобы лишний раз не сталкивать пользователя с таким поведением движка." Полностью поддерживаю! Проголосуйте, кому небезразлична судьба корзин))