Почему использование сессии не лучший способ сделать это? Я бы сказал, что это так.
У вас может быть отдельная, основанная на сеансе структура "не вошедшей в систему" корзины покупок, точная копия обычной корзины. Если пользователь не вошел в систему, продукты хранятся там.
Когда пользователь входит в систему, вы объединяете содержимое незарегистрированной корзины с любыми элементами, которые пользователь уже может иметь в своей пользовательской корзине.
Этот момент также является местом для разрешения любых конфликтов, которые могут возникнуть в результате выбора продукта (например, выбранный продукт уже присутствует в корзине пользователя, вошедшего в систему).
Использование файлов cookie в соответствии с рекомендациями @Codemwnci для хранения продуктов или идентификатора корзины также является хорошей идеей, поскольку позволяет пользователю вернуться позже и по-прежнему иметь содержимое своей корзины, которое вы, возможно, захотите.
Тот же принцип объединения будет применяться и здесь, с дополнительной проверкой, действительно ли продукты в куки являются действительными (они могли быть удалены, так как пользователь сделал свой выбор, или пользователь мог изменить куки) ,