Заказ хранить однозначно в базе.
При первом входе пользователю кидается кука. Не важно зарегистрирован или нет. И обязательно дайте какой нибудь идентификатор, который можно ввести на другом устройстве.
В итоге получаем 4 кейса.
1. аноним (без регистрации) - просто оформляет заказ, желательно, сохранить его данные и при последующем заказе подтянуть их что бы не заполнял снова, ну и выдать сообщение мы рады что вы вернулись. Привязка по почте, телелефону или адресу
2. аноним (он зарегистрирован, но пока не вошел) - при оформлении нужно показать сообщение мол вы можете войти и заполнить все данные автоматом
3. уже вошел в систему - тут просто оплата
4. ввод номера заказа на другом устройстве, тут устанавливается кука и подтягиваются данные с сервера