#asp.net-mvc #cookies #shopping-cart
#asp.net-mvc #файлы cookie #корзина покупок
Вопрос:
У меня есть реализация корзины, которая использует Session, и я хочу перейти на версию, основанную на файлах cookie. Более того, на самом деле я сохраняю полную корзину в сеансе и хочу перейти на версию, в которой в cookie содержится только идентификатор cartID, а содержимое находится в базе данных.
Я прочитал много сообщений в блоге и даже вопросов по SO, но все еще испытываю некоторую путаницу в некоторых областях:
- как происходит цикл обновления файлов cookie? На самом деле я создаю новую корзину, когда начинается новый сеанс. Затем я управляю сеансом на основе действий клиента (добавить в корзину, удалить из корзины, очистить при оформлении заказа)
- как я могу создать уникальный cookieId
- какой наилучший способ справиться с задачей резервного копирования в базу данных? Используя jQuery или лучше обрабатывать все на стороне сервера?
Например, я использую asp net mvc с c #.
Ответ №1:
Я использовал Session для сохранения всей корзины покупок. Позже я сохранил только идентификатор корзины покупок в cookie и фактические товары в базе данных.
В моем сценарии сначала я временно сохраняю товары в корзине покупок. После успешного оформления заказа я перемещаю товары из корзины покупок в таблицы Order и OrderItem и удаляю корзину.
Вот что вы можете извлечь из моей ошибки.
каков жизненный цикл файлов cookie? На самом деле, я создаю новую корзину, когда начинается новый сеанс. Затем я управляю сеансом на основе действий клиента (добавить в корзину, удалить из корзины, очистить при оформлении заказа)
Не создавайте cookie при начале нового сеанса. Вместо этого вы хотите создать запись в базе данных только после того, как клиент добавит товар в корзину. Затем сохраните этот GUID в cookie.
Основная причина в том, что если вы создадите файл cookie слишком рано, в итоге у вас будет слишком много заброшенных корзин.
К вашему СВЕДЕНИЮ: вы хотите запланировать задачу по очистке заброшенных корзин через определенный промежуток времени.
как я могу создать уникальный cookieId
Сделайте идентификатор столбца базы данных уникальным идентификатором. После создания новой корзины покупок сохраните возвращенный идентификатор GUID в cookie.
какой наилучший способ справиться с задачей резервного копирования в базу данных? Используя jQuery или лучше обрабатывать все на стороне сервера?
Вы хотите сгенерировать GUID на стороне сервера, как указано выше.
Не используйте целое число с приращением идентификатора. Это приведет к большой дыре в безопасности, потому что вы можете легко предсказать количество.
Комментарии:
1. Спасибо, что поделились своим опытом. Как вы обрабатываете анонимные корзины? Это корзины для пользователей, которые еще не вошли в систему?
2. Я создаю столбец userId (разрешить значение null) рядом со столбцом первичного ключа GUID . Если анонимный пользователь добавляет товар в корзину, я оставляю идентификатор пользователя пустым. После входа в систему я возвращаюсь и заполняю userId идентификатором пользователя.