Я занимаюсь созданием веб-сайта, который включает в себя корзину покупок. Существует два основных требования:
Пользовательский опыт ребята хотят, чтобы логин / аутентификация был последним шагом во всем рабочем потоке. Пользователь получает все покупки и просят войти в систему только во время проверки.
Корзина не должна истекать (даже при закрытии браузера), если пользователь (зарегистрированный или нет) не выполняет проверку.
В приведенном выше контексте у меня есть следующий вопрос относительно поддержания состояния тележки:
Должен ли я идти с сеансами на основе файлов или базы данных? Пожалуйста, имейте в виду, что это будет для незарегистрированных пользователей. Мое опасение заключается в том, что у меня будет много записей в базе данных.
Другой вариант, похоже, состоит в том, чтобы поместить содержимое корзины в зашифрованный файл cookie, но тогда существует ограничение по размеру файла cookie.
Что бы вы сделали в этом случае? Я был бы очень признателен за ваши ответы.
Отслеживание пользователя. Используйте GUID, закодированный в файл cookie с истечением n Year.
Хранение хозяйственной сумки. Вы не хотите хранить сумку в cookie, в основном из-за ее возможного размера. Это оставляет возможность перенести его на носитель и извлекать его из среды. Использование чего-либо, кроме базы данных для этого, будет напоминать возвращение во времени, базы данных превосходят хранение и извлечение данных.
Управление вашей сумкой. Теперь, вопрос о вашей схеме, во-первых, если вы собираетесь запускать запросы против сумок в базе данных (то есть, сколько сумок содержит элемент x ), вам, вероятно, нужна традиционная реляционная схема. Однако это имеет накладные расходы с точки зрения вставки. обновление, выбор (и объединение) и удаление данных мешков (в какой-то момент у вас появятся сумки, которые больше никогда не будут использоваться, но занимают драгоценное дисковое пространство). С загруженным сайтом это довольно мало Транакций в секунду, но любая база данных должна справиться. Если вам не нужно запрашивать сумки в базе данных, вы можете сохранить их как XML. Просто сериализуйте сумку и выгрузите ее в таблицу, а PK – как GUID, как хранится в cookie пользователей. Это было бы намного быстрее, чем традиционная схема, и вы всегда могли бы разорвать XML в будущем, если бы требовалось создать реляционную схему.
Это то, что мы делаем (Xml Bag), и у нас есть миллион + клиентская база.
Я бы пошел с сеансами управления базами данных через сеансы, управляемые файлами. Удостоверьтесь, что у вас есть временная метка сеанса, чтобы вы могли в конечном итоге убить старые сеансы (если прошло 12 месяцев, покупатель, возможно, не вернется для предметов, которые первоначально были в корзине).
Выполнение этого с помощью базы данных вместо файлов упростит окончание срока действия очень старой информации.
Обратите внимание, что сеанс базы данных будет действителен только до тех пор, пока cookie, на который он привязан, находится на компьютере пользователя. Если пользователь возвращается в магазин из другого браузера, они не найдут свою сессию. Если два человека используют один компьютер, они найдут друг друга. Надеюсь, в тележке не будет никаких смущающих вещей …
Храните в файлах cookie файлы AnonymousSessionID, с которыми вы связываете корзину в базе данных.
Затем у вас будет задача планировщика, чтобы стереть анонимные сеансы через некоторое время (например, в день). Это позволит вашей базе данных очистить заброшенные сеансы.
Если пользователь регистрируется, вы повторно связываете свою корзину с их учетной записью на постоянной основе. Если пользователь делает заказ, вы пустите свою корзину покупок.
С этими спецификациями я бы пошел с состоянием сеанса базы данных. Но вы должны очень внимательно прочитать, как обрабатывается состояние сеанса на вашем веб-сервере. Так как вы хотите, чтобы возродить состояние к правильному человеку.
Я думаю, что у вас есть определенные надежды на управление, или, может быть, вы не совсем поняли требования.
- Пользовательский опыт ребята хотят, чтобы логин / аутентификация был последним шагом во всем рабочем потоке. Пользователь получает все покупки и просят войти в систему только во время проверки.
- Корзина не должна истекать (даже при закрытии браузера), если пользователь (зарегистрированный или нет) не выполняет проверку.
В частности, сохраняется сохраненная анонимная, не зарегистрированная корзина пользователя? Это безумие. Убедитесь, что это не ожидание и не разъясняет его в ваших проектных документах.
Если вы используете ASP.NET, вот что мне нужно (делать):
(не пытайтесь сохранить порядок XML в профиле. Я думаю, что это требует проблем с производительностью, но теоретически вы можете предположить)