Проблема с корзиной покупок

#c# #asp.net #shopping-cart

#c# #asp.net #корзина покупок

Вопрос:

Я внедрил простую корзину покупок на веб-сайте. Я сохраняю корзину и товары в Session объекте. После проверки пользователями (с помощью Paypal) я очищаю товары из корзины. Это работает нормально, но я видел проблему в следующем сценарии:

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

Какой подход я должен принять, чтобы избежать этого, или мне придется смириться с этим?

РЕДАКТИРОВАТЬ:- После публикации вопроса я думал об этом. Я соглашусь на это простое решение, всякий раз, когда пользователь отправляется на оформление заказа, я буду обращаться к базе данных, чтобы загрузить корзину вместо сеанса. Таким образом, я не буду обращаться к базе данных для отображения товаров в корзине (сверху), и не будет никаких проверок на основе фантомных товаров.

Ответ №1:

С того момента, как вы сохраняете товары корзины в сеансе и у вас разные сеансы, у вас есть разные корзины.

Чтобы устранить это, вам нужно иметь общее место для всего сеанса, в котором вы собираетесь сохранить свою корзину, и это таблица в базе данных. К этому общему месту подключается пользователь ether с идентификатором пользователя, ether с пользовательским файлом cookie.

Комментарии:

1. ваше решение, несомненно, устранит проблему, но это действительно маленький веб-сайт, и я сейчас не хочу полностью внедрять общий сеанс и т.д. Я подумал о другом варианте, который я добавляю к своему вопросу.

2. @Aritos это хорошее решение, но в настоящее время я буду придерживаться подхода, который я изложил в моем отредактированном вопросе.

Ответ №2:

Вам пришлось бы настроить раздел панели корзины покупок на странице с помощью AJAX и использовать setTimeout() для его регулярного обновления.

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

Редактировать

И под «делать это правильно» я подразумеваю отслеживание товаров в корзине на основе идентификатора пользователя, а не только объекта сеанса.

Комментарии:

1. товары отслеживаются по их собственному уникальному идентификатору идентификатор пользователя. Но проблема в том, что я добавляю товар x в корзину и выписываюсь, затем снова добавляю товар x и выписываюсь. нет способа узнать, тот же это товар или новый: (

2. Наверняка в этом случае вы хотите оформить заказ дважды, поскольку добавили два одинаковых товара по отдельности? Как только товар извлечен, он будет связан с каким-то идентификатором транзакции / заказа (я полагаю?), Так что вы можете сказать, что это были две отдельные сущности, а не 1 подлинная, 1 поддельная?

Ответ №3:

Ваше веб-приложение основано на протоколе HTTP, который открывает и закрывает соединение только для удовлетворения веб-запроса Http. Теперь вполне нормально, что если вы откроете еще два браузера и зайдете в один из них, вы все равно сможете увидеть ту же страницу (информацию) на другом. Что, я думаю, вам следует сделать, так это просто избежать того, чтобы пользователь мог выполнить проверку дважды или обработать, пытается ли кто-то извлечь пустую корзину (как в вашем случае, если пользователь нажал оформить заказ во втором браузере), и в этом случае вы можете просто показать сообщение. Если вы выберете решение, для которого вам следует обновлять страницу с интервалом, имейте в виду, что может произойти, если пользователь откроет и войдет в систему в 250 разных сеансах: сколько раз будет отображаться ваше веб-приложение? Если вы последуете моему предложению, весь сеанс пользователя получит просто страницу с ошибкой, например: bastek пуст. Я надеюсь, что это имеет смысл