Идеальный способ хранения информации о продукте в корзине покупок в asp.net

Я создаю приложение электронной торговли, в котором у меня есть корзина для покупок.

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

Тем не менее, я увеличил тайм-аут сеанса до 600 минут (10 часов), но я обеспокоен тем, что это лучший подход для хранения информации о корзине покупок, потому что, если есть, например, 1000 пользователей, обращающихся к сайту одновременно, быть 1000 объектов сеанса, созданных на сервере, не ухудшит производительность моего сайта.

Я не могу сохранить его в базе данных, потому что если пользователь анонимный, у меня нет уникальной вещи о пользователе, таким образом, если 1000 пользователей получат доступ к сайту, все продукты получат слияние, я не смогу извлечь продукт, сохраненный текущим пользователем.

Есть ли другой лучший подход для этой проблемы.

1 ответ

Вы не должны реализовывать это. Сессии 10 часов очень длинные, если у вас 1000 пользователей на вашем сайте, ваш сервер будет страдать и создаст некоторые проблемы с производительностью.

На наших сайтах электронной коммерции мы создаем cookie для анонимных пользователей. После этого у вас есть два решения:

  • Храните всю корзину в файле cookie (в основном список идентификаторов продуктов + количество, в зависимости от ваших потребностей/стратегии) ​​или других методов (например, localStorage).
  • Сохраните уникальный идентификатор в файле cookie и сохраните корзину в базе данных (временную таблицу) с уникальным идентификатором файла cookie в качестве идентификатора. После входа пользователя в систему вы перемещаете эти данные в таблицу корзины пользователя.

Вы можете легко изменить время истечения срока действия файлов cookie (или удалить его), не влияя на общую производительность вашего сервера. Для идентификаторов вы можете использовать Guid.NewGuid().

UPDATE:

Подробнее о моем втором решении - сценарии:

  • Веб-сайт посетителя пользователя
  • Вы создаете файл cookie без истечения срока действия: cartId со значением Guid.NewGuid() (имя и значение зависят от вас).
  • Пользователь нажал кнопку "Купить"
  • Получите серверную часть cookie и добавьте cartId, продукт/количество в таблицу "AnonymousBasket".
  • Представьте, что пользователь покидает веб-сайт и возвращается через месяц, cookie будет по-прежнему здесь.
  • Если анонимный пользователь отправляется в свою корзину, вы можете получить его продукты и количества на основе значения файла cookie.
  • Если пользователь выполнил вход в систему, вы удалите файл cookie и переместите данные из таблицы "Анонимная корзина" в "Корзина".
  • Теперь ваш зарегистрированный пользователь может обработать кассу

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

licensed under cc by-sa 3.0 with attribution.