Влад, такова суровая правда жизни. Чем опытнее разработчик, тем меньше он программист и тем больше он проектировщик-архитектор. Этому, как вы понимаете, на курсах толком не научат, даже если такое курсы и есть.
alexcook, у нас алгоритм такой:
— гость набивает корзину, её идентификатор хранится в куке. Дропнул куки/сменил/браузер/сменил устройство — его проблемы. При этом на сайте маячит плашка «Зарегайся, тут много вкусного!», эта же инфа в чекауте;
— если гость зарегается в процессе набивания корзины, то корзина привяжется к этому новому пользователю;
— гость создаёт заказ, указывая мыло и телефон, ему приходит письмо с уникальной ссылкой на просмотр заказа, которая живёт вечно;
— при создании заказа (в чекауте) гость может тыкнуть галочку «Зарегать меня», ему придёт письмо с рандомным паролем;
— если гость решил остаться гостем, то его право, в заказе сохраняется вся инфа для доставки, а поле типа customer_id = null.