Где хранить данные о заказах в корзине интернет магазина до оформления заказа?
Приветствую.
Где хранить данные о заказах в корзине интернет магазина до оформления заказа? Варианты: база данных, сессия, куки, локальное хранилище. Вроде бы, можно сделать так, как больше нравится, но наверняка есть выработанные подходы. Будет замечательно, если аргументируете.
Если пользователь зарегистрировался и вошел в кабинет, то хранить в базе данных.
Если пользователь не зарегистрирован, то хранить в localStorage или в IndexedDB, просто потому что куки и сессия может быстро протухнуть, а это очень сильно разочаровывает, когда ты накидал интересных вещей в корзину, а через некоторое время открыл сайт, а в корзине пусто.
Если пользователь незарегистрированным накидал в корзину товаров, то если он зарегистрируется, то сохранить корзину в базу данных.
Заказ хранить однозначно в базе.
При первом входе пользователю кидается кука. Не важно зарегистрирован или нет. И обязательно дайте какой нибудь идентификатор, который можно ввести на другом устройстве.
В итоге получаем 4 кейса.
1. аноним (без регистрации) - просто оформляет заказ, желательно, сохранить его данные и при последующем заказе подтянуть их что бы не заполнял снова, ну и выдать сообщение мы рады что вы вернулись. Привязка по почте, телелефону или адресу
2. аноним (он зарегистрирован, но пока не вошел) - при оформлении нужно показать сообщение мол вы можете войти и заполнить все данные автоматом
3. уже вошел в систему - тут просто оплата
4. ввод номера заказа на другом устройстве, тут устанавливается кука и подтягиваются данные с сервера
И обязательно дайте какой нибудь идентификатор, который можно ввести на другом устройстве
Уже частный случай...т.е. не совсем "обычное" решение...зависит от проекта...хотя у меня в одном именно так и сделано...ибо регистрации там вообще нет...
Не думаю, что можно дать конкретный ответ - тут многое зависит от того, какие технологие используете и на какие платформы нацелены.
К примеру, если предполагаете, что в будущем появиться мобильное приложение и/или перепишите фронт на условном react/vue/[подставить свое], то лучше хранить в базе.
Если точно знаете, что дальше сайта не уйдете - можно и в сессии.
Не надо в сессии: пользователь может накидать товары в корзину на одном ПК (например, на работе), а потом завершить оформление заказа на другом (например, дома). Очень разочаровывает, когда корзина привязана к сессии.
paran0id, Да, но есть случаи, когда оформление происходит без регистрации (ну т.е. даже без привязки к "пользователю")...тогда надо что-то другое придумывать...чтобы:
завершить оформление заказа на другом (например, дома)