Ecommerce :: Корзина покупок :: Где хранить данные корзины покупок в сеансе или в базе данных - PullRequest
3 голосов
/ 13 мая 2010

Где хранить данные корзины покупок в сеансе или в базе данных? (Я думаю, что в корзине amazon.com после того, как пользователь выйдет из системы и через месяц снова войдет в систему, его заказы, которые он выберет в корзине, сохранены) Спасибо, Йосеф

Ответы [ 5 ]

18 голосов
/ 19 октября 2016

Конечно, данные корзины покупок являются критически важными. Где хранить эти данные, зависит от того пользователя, с которым работает ваша система электронной торговли.

  1. Для пользователей без подписи (пока) - вы должны сохранить эти данные в веб-хранилище, html5 дает вам возможность для этого. Просто используйте Front End Storage, которая оснащает любой браузер (Cookie, Session Storage, Local Storage) , При оформлении заказа система должна требовать регистрации от пользователя. После регистрации вы должны синхронизировать эти данные с базой данных. В противном случае вам не нужно сохранять эти не отслеживаемые данные в базе данных.

  2. с подписанными пользователями - конечно, в базе данных. Таким образом, вы можете правильно отслеживать корзину пользователя. Если пользователь войдет в систему из любого места, где вы сможете показать ей свой аккаунт и «товары для ожидающего платежа». И сохранение этих данных в хранилище браузера зависит от вашего вкуса.

эта информация также может быть полезна Клиентская и серверная карты для покупок

enter image description here

7 голосов
/ 13 мая 2010

Как насчет обоих? Когда вы читаете данные корзины покупок, сначала проверьте ваш сеанс. Если он есть, вы сохраняете поездку в базу данных (если ваша сессия не поддерживается базой данных). Когда вы пишете, пишите в сеанс и сохраняйте в базу данных. Таким образом, вы получаете быстрое чтение, и пользователь не теряет свою корзину, когда закрывает браузер.

2 голосов
/ 13 мая 2010

Если программное обеспечение вашей корзины для покупок может максимально использовать заброшенные корзины (отправлять напоминания о том, что, возможно, они должны вернуться и завершить процесс продажи), удалить их из базы данных и провести хорошую очистку базы данных, а затем сохранить их в базе данных.

Если разрешено только возвращающемуся пользователю продолжать работу с текущими элементами корзины, сохраните их в хеше в cookie.

Если вы хотите новую корзину при повторном посещении, то, возможно, оставьте сеанс.

1 голос
/ 19 февраля 2018

Я здесь это офигенно. Создайте гибкую / прогрессивно улучшенную корзину для покупок.

Не авторизован

План A) Если используется веб-хранилище, используйте его (хранилище сеансов / локальное хранилище), зная, что ВСЕ данные корзины покупателя могут быть объединены в таблицу базы данных отслеживающей корзины (с отметками времени и идентификаторами сеансов) с использованием AJAX тоже. Синхронизация и сокращение - это ключ (клиент, таблица отслеживания). Нет серверной сессии хранения отдельных данных корзины не требуется.

Если браузер закрывается, корзину можно восстановить. Изящное закрытие браузера должно привести к вызову AJAX, который удаляет таблицу отслеживания.

Корзина отслеживания не является авторитетной (используется для воздействия / резервирования запасов), поскольку она не представляет идентифицированного клиента на грани оплаты. Только если клиент нажмет check-out , предметы в корзине отслеживания будут иметь значение с точки зрения инвентаря (однако, это еще не все).

План Б) В противном случае вернитесь к логике только для файлов cookie сеанса. Используйте AJAX для чтения / записи данных в централизованной таблице отслеживания корзины. Клиент никогда не сохраняет отдельные данные корзины и не хранится в данных сеанса (управляемых базой данных или нет). Пока клиент не вошел в систему, данные его корзины находятся только в централизованной корзине отслеживания.

Если браузер закрывается, клиентская корзина навсегда теряется. Если браузер корректно закрывается, элементы также будут удалены из таблицы отслеживания с помощью вызова AJAX. В противном случае старые данные корзины в базе данных удаляются с отметками времени активности.

Альтернативный план B) Реализация постоянного клиентского решения с использованием стандартных зашифрованных файлов cookie. Таким образом, независимо от того, корректно ли закрывается браузер, можно повторно установить клиентскую корзину и обновить таблицу отслеживания. Это помогло бы старым пользовательским агентам и избавило бы их от разочарования за счет дополнительных программ и тестирования.

Примечание: Вы должны предвидеть и обрабатывать реальность того, что идентификаторы сеансов будут меняться в течение всего срока сеанса. Если вы хотите избежать фиксации сеанса, вы не можете использовать один и тот же идентификатор сеанса снова и снова для каждого HTTP-запроса. Следовательно, вы должны ОБНОВЛЯТЬ идентификатор сеанса в главной таблице отслеживания при каждом запросе. * Это может быть много обновлений, если многие пользователи не вошли в систему и у них много продуктов в корзинах.

авторизован

Когда клиент входит в систему, вы копируете содержимое его корзины отслеживания в свою собственную таблицу корзины покупок (обычная таблица, а не в сеансе). Теперь в игру-оболочку будут играть клиент, данные таблицы корзины и основная корзина отслеживания. Содержимое корзины пользователя теперь является постоянным независимо от агента пользователя. Таблица корзины покупателя пользователя еще не является авторитетной.

Только когда пользователи нажимают кнопку «Проверить», содержимое корзины пользователя влияет на доступность инвентаря. Только после покупки фактический запас уменьшится.


Эта последняя строка поднимает важный вопрос. Есть разница между тем, что есть в наличии, и тем, что есть в наличии. Из-за одновременного использования веб-сайта любое количество людей может положить один и тот же товар в свою корзину, пока он не станет недоступным.

Если в наличии 10 книг по Linux, 20 человек могут положить 1 копию в корзину. Первые десять не являются проблемой, но должна ли вторая десятка отображаться сообщение ПРОДАНО? Нет. Что, если 15 человек уйдут, скажем, не обращая внимания, но никогда не опустошат свою тележку? Все должны видеть В НАЛИЧИИ, но только те, кто нажал оформить заказ , должны повлиять на доступность . Те, кто платит, должны влиять на инвентарь .

Таким образом, при настройке таблиц продуктов обязательно укажите два поля для отслеживания продуктов: доступность и количество . Они связаны, но в смысле электронной коммерции они не одинаковы.

Заключительное примечание: В сценарии с веб-сервером с балансировкой нагрузки (пользователи Amazon Web Service, вероятно, согласятся с этим), более вероятно, что сеансы будут обрабатываться базой данных, поскольку это проще централизовать данные. Хотя возможно иметь сетевое, централизованное и основанное на файлах хранилище сеансов / NFS в решении типа NAS, это может быть нецелесообразным или оптимальным (задержка, проблемы с блокировкой файлов).

1 голос
/ 22 августа 2010

Я часто сначала обновляю данные корзины в базе данных и сохраняю кэшированную версию для запросов только для чтения, например показ мини-тележки на каждой странице. Данные корзины должны быть оптимизированы для чтения. А поскольку данные корзины часто невелики, поэтому я хотел бы хранить их анонимными пользователями в течение нескольких месяцев, а также сохранять их в файлах cookie.

...