Я немного смущен тем, каким должен быть мой подход: я работаю над дизайном корзины покупок, и мне нужно хранить корзину покупок либо в сеансе, либо в базе данных, но я не уверен, какой подход будет наилучшим. Вот пример использования
- Пользователь не залогинен и не добавляет продукт в корзину (Анонимный пользователь)
- Пользователь залогинен и добавляет товар в корзину.
Первый случай меня больше смущает, так как может быть много случаев, когда пользователь просто заходит в интернет-магазин и добавляет продукт без входа в систему, и вполне возможно, что он не пойдет на процесс оформления заказа.
Но все же нам нужно создать корзину для этого пользователя, чтобы создать и сохранить корзину, у меня есть два варианта.
- Когда пользователь добавляет товар, создает корзину в базе данных и связывает эту корзину с этим пользователем, в тот момент, когда он вошел в систему, переместите эту корзину вошедшему в систему пользователю.
- Создайте корзину, добавьте продукт в нее и сохраните ее в сеансе, когда пользователь вошел в систему создания корзины в базе данных и связал зарегистрированного пользователя с этой корзиной с пользователем.
Я знаю, что как основанная на базе данных система Cart, так и основанная на сеансах, может иметь как положительные, так и отрицательные стороны, но не уверена, какой из них может быть лучшим подходом с учетом следующих моментов.
- Масштабируемость
- гибкость
- растяжимость
- Приложение должно заботиться о скорости
Ищите вход по этому аспекту, чтобы решить путь.
источник
Ответы:
Я бы выбрал решение, в котором уникальный идентификатор присваивается всем посетителям при первом посещении сайта. Неважно, являются ли они анонимными или аутентифицированными. Когда анонимные пользователи регистрируются, сохраняют уникальный идентификатор.
Храните корзину в базе данных. Хранилище дешево, и не должно быть проблем с производительностью, чтобы делать запрос для корзины время от времени.
источник
Оба метода имеют свои преимущества и недостатки, но, как я понимаю, хранение базы данных имеет два довольно больших преимущества.
источник
Вопрос в том, что вам вообще нужны сеансы, которые на моем рынке клиентов не нужны. Я управляю несколькими сотнями сайтов электронной коммерции, и несколько из них получают высокий трафик. Мы никогда не используем сессии, так как они не масштабируются, если только они не обработаны, тогда они просто медленнее или требуют большей настройки. Сеансы используют память, а выборка базы данных состояния сеанса очень медленная и требует больше движущихся частей.
Вместо этого мы используем HTML5 sessionStorage для сохранения любой пользовательской информации, которую нам нужно извлекать снова и снова, но без необходимости каждый раз использовать cookie-файл для увеличения пропускной способности. Это IE8 +, и все другие современные браузеры и мобильные устройства совместимы с этой технологией. НО вы можете просто сохранить корзину в cookie-файле в качестве запасного варианта, поскольку это то, что мы делали ранее. Вот хорошая корзина печенья: http://simplecartjs.org/
Когда пользователи входят в систему или входят в систему, мы используем зашифрованный файл cookie с отметкой времени.
Мы также движемся в направлении использования ApplicationCache, где это применимо, что еще больше сократит веб-трафик в качестве дополнительного примечания, поскольку вы можете предварительно выбирать ресурсы и даже каталогизировать данные, чтобы пользовательский взгляд был очень быстрым загрузочным веб-сайтом, а мобильное устройство также будет работать в автономном режиме (за исключением транзакций). Конечно, вы должны быть осторожны, чтобы обновлять манифест при изменении продуктов и т. Д.
источник
Вы предполагаете, что хранилище сеанса и хранилище базы данных являются эксклюзивными. Это не так. Но давайте начнем с предположения, что они есть.
Преимущество хранения сеансов в три раза:
Недостатки хранения сессии:
Преимущества хранения базы данных:
Недостатки хранения базы данных:
Вы не упомянули, какую платформу вы используете. Я бы искал подход, который использует сеанс, поддерживаемый базой данных, где данные сеанса существуют только в памяти в течение жизненного цикла запроса / ответа, загружая их из базы данных и сохраняя обратно в базу данных. Это хорошо послужило мне в прошлом.
Преимущества сеанса, поддерживаемого базой данных:
Недостатки сеанса, поддерживаемого базой данных:
Есть третья возможность, о которой кто-то упоминал ранее. Вы можете вообще отказаться от использования сессий и использовать хранилище на стороне клиента, либо встраивая все в cookie, либо в локальное html-хранилище.
Я оставлю плюсы и минусы этого в качестве упражнения для вас, но я дам вам подсказку, что для хранения html5 совместимость браузера может быть чем-то, что нужно тщательно изучить.
Я изложил факты для вас. Надеюсь, это поможет вам принять правильное решение для вашей ситуации.
источник
Давайте рассмотрим два варианта использования, которые вы упомянули
В этом случае вы определенно хотите сохранить информацию о корзине пользователя в сеансе, чтобы обеспечить его хорошее обслуживание во время сеанса. Если он / она решает войти в систему / создать учетную запись, вы можете справиться с этим на основе следующего варианта использования. Если он / она не входит в систему, вам не нужно заполнять базу данных информацией об этом госте, поскольку она использовалась только для обслуживания гостя во время сеанса. Эти данные могут обрабатываться без учета состояния, т.е. не состояние не сохраняется от сеанса к сеансу.
В этом случае вы можете обрабатывать его так же, как описано выше (сайты электронной коммерции старой школы), а также добавлять эту информацию в базу данных и связывать ее с пользователем. Это в основном используется для предоставления информации о состоянии (состояние сохраняется от сеанса к сеансу), такой как «История просмотра продукта», «Рекомендации» и т. Д., Например, аналогично Amazon.com.
Что нужно подумать:
источник
Перейти к сеансу, когда пользователь не вошел в систему. Даже после входа в систему сначала создайте корзину в сеансе и сохраните ее в базе данных только тогда, когда пользователь выйдет из системы или истечет время сеанса.
Вам необходимо следить за количеством создаваемых тележек в сеансе.
источник