Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Супер-модератор
Эксперт JSЭксперт HTML/CSSЭксперт PHP
 Аватар для gogolik
3952 / 2061 / 829
Регистрация: 13.03.2010
Сообщений: 6,781

Где лучше хранить корзину покупателя в ИМ?

14.12.2020, 10:34. Показов 3409. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени.

Возьмём ситуацию в вакууме: есть самописный интернет-магазин, который не привязан ни к одному фреймворку. Написан магазин, соответственно, на PHP. БД - MySQL/MariaDB. И в один момент встаёт вопрос: где лучше хранить корзину покупателя? В сессии? localStorage? Куках? Базе? Другие варианты?

Дискасс.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2020, 10:34
Ответы с готовыми решениями:

Как лучше хранить корзину в интернет-магазине?
Добрый день. Как считаете, как лучше хранить корзину в интернет-магазине? Лично мне в голову пришло три варианта: 1. В БД. Плюсы: не...

Как лучше хранить большую корзину (больше 140-170 товаров)?
Сейчас храню корзину в куках (id-товара и количество). Но при количестве товаров больше 140-170 они начинают пропадать из корзины (из-за...

Где лучше хранить *.jar
Привет! По идее можно хранить в нескольких местах 1. в файловой системе в папке jvm/lib/ext 2. в java библиотеке 3. в web-inf...

3
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
14.12.2020, 12:21
Если хранить в бд, то есть возможность привязать к аккаунту, и показывать одну корзину на любом устройстве пользователя.
Остальные будут работать в только в пределах одного браузера, но зато меньше операций с бд, хотя все равно при совершении покупки потребуется зафиксировать в бд корзину.
Вариант с куками тут наихудший - корзина будет отправляться "бонусом" к любому запросу, хотя можно попробовать и путь для куки установить, чтоб корзина только там где она нужна отправлялась.
У сессии проблема в коротком сроке жизни.
localStorage вроде не плохой вариант, и затрагивает только клиентский код
1
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
14.12.2020, 13:34
На клиенте - это какая-то неполноценная корзина. Обычно используется в "магазинах", в которых и аккаунтов-то нет. Часто результат быстрого переделывания сайта-каталога в некоторое подобие магазина.

Добавлено через 2 минуты
Цитата Сообщение от gogolik Посмотреть сообщение
В сессии?
Тоже может "потеряться". Сессия - это обычно "быстрый кэш" хранящегося где-то еще

Добавлено через 5 минут
Можно сделать накопление на клиенте до получения авторизации, т.е. легкий вариант корзины, пока пользователь не выполнит вход.
1
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
14.12.2020, 19:18
gogolik, Можно сделать StorageInterface с 2мя методами load() и save($items) и для начала реализовать простой SessionStorage. В дальнейшем можно будет подменять реализацию на CookieStorage, DBStorage и т.д., не трогая остальной код. По этой причине я бы не советовал хранить в localStorage, так как подменить его реализацию уже так просто не получится.

Далее можно добавить HybridStoage, если пользователь не авторизован - то берем SessionStorage, иначе DBStorage. Добавим еще логику перенос элементов с SessionStorage в DbStorage на случай, если пользователь сначала накидает товары в корзину, а потом авторизуется. Что-то типа такого.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class HybridStorage implements StorageInterface
{
    //...
    
    public function load()
    {
        return $this->getStorage()->load();
    }
 
    public function save($items): void
    {
        $this->getStorage()->save($items);
    }
 
    private function getStorage()
    {
        if ($this->storage === null) {
            $sessionStorage = new SessionStorage( ... );
            if ($this->user->isGuest) {
                $this->storage = $sessionStorage;
            } else {
                $dbStorage = new DbStorage( ... );
                if ($sessionItems = $sessionStorage->load()) {
                    $dbItems = $dbStorage->load();
                    $dbStorage->save(array_merge($sessionItems, $dbItems));
                    $sessionStorage->save([]);
                }
                $this->storage = $dbStorage;
            }
        }
        return $this->storage;
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.12.2020, 19:18
Помогаю со студенческими работами здесь

Где лучше хранить данные
Проблема вот в чем. Один знакомый попросил написать для него прогу для составление и хранение данных о своей семье в виде генеологического...

Где лучше хранить контент?
Предположим я создал сайт, который решил заполнять информацией и так далее... И всплыл вопрос, а как лучше хранить статьи, в базе или...

Где лучше хранить информацию
Здравствуйте уважаемые форумчане. У меня есть числовой набор данных. При нажатии на submit какое то из этих чисел будет обновляться....

Где лучше хранить настройки?
Мне нужно сохранить в основном цвета. Допустим я задел цвет линиям красный, фон черный и так далее. Потом после нового запуска программы...

Где лучше хранить id собеседника SignalR?
Я думал сохранять в сессиях, но может есть лучше вариант?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru