Корзина интернет-магазина: данные в cookies, или в базе
Не могу решить, где лучше хранить данные о незавершённых покупках пользователя в интернет-магазине?
Класть товары корзины в сессию, в cookies, или хранить их в отдельной таблице в базе, которую периодически чистить..?
Прошёлся по крупным магазинам(amazon, ozon) — в cookies они оставляют только идентификатор сессии.
Раньше было принято хранить корзину в куках.
Сейчас хорошей практикой является хранение корзины в БД.
Преимущества хранения в БД:
1) Корзина может храниться сколько угодно долго.
2) Корзина не теряется, если покупатель зашёл с другого браузера/компьютера.
А если клиенты не логинятся?
Что корзина из cookies с другого браузера будет недоступна/по expire сотрётся, что сессионный идентификатор.
А аргумент «сколь угодно долго» и для кук, и для базы действителен — срок хранения то сколь угодно большой можно выставить.
Единственный минус хранить в бд это то что нужно еще заморачиваться с авторизацией, а если простая корзинка нужна то в принципе можно и куками обойтись как я и сделал
хорошее решение, а то в куках больно мало можно хранить, я на простом проекте максимум id товара и его кол-во хранил, а остальное уже на фронте доставал, хотя щас понял что можно отдельно на сервере подтягивать инфу что бы отправлять все данные на клиент)
Храню корзину месяц в сессии. Регистрации нет, поэтому 2-й пункт из перечисленных Bartez невозможен.
Если кроме количества товаров и id вам понадобится хранить еще вские конфигурации товаров, или другую инфу, её будет намного удобнее держать в структурах языка, сериализуемых в сессии, чем в таблицах базы.
эм, при хранении сессий по месяцу не многовато ли файлов соберётся в директории с сессиями?
должно дико тормозить при нормальной посещаемости.
Преимущества которое вы описали как бы нет. Никто не мешает повесить на деструктор повесить запись сериализованных данных в базу, а в конструкторе востонавливать на основании юзер ид или сессион ид.
А я храню в куках и ниче, нормально. Минусы озвучили. Плюсы — мгновенное добавление в корзину и мгновенное изменение количества товаров/суммы. Храню в виде json. Что бы кука переполнилась надо очень много положить в корзину
В терминах ASP.NET сессия (Session) храниться только пока пользователь находиться на сайте + таймаут по (умолчанию 20 мин), как то так…
А сессия хранящаяся месяц, это странно. Видимо здесь речь о какой то другой сессии.
Лучше корзину хранить на стороне сервера. База, NoSQL, файлы — это уже на выбор. Я бы посоветовал Redis, к примеру. Там уже есть слежение за актуальностью данных.
решил попробовать добавление в корзину делать через куки, а когда уже при запросе страницы корзины или других страниц, читать куки на сервере и сразу класть в сессию сервера.. ну и на сервере очищать куки браузера..