В базе храню. Клиенты расстраиваются, когда не могут обнаружить свою корзину на другом устройстве, а заказчики расстраиваются, если не могут сделать аналитику по брошенным корзинам.
Владимир Коротенко, не обязательно. Можно привязать корзину к идентификатору сессии, а при оформлении заказа регистрировать юзера по указанным реквизитам.
Самая грамотная по моему следующая стратегия.
Анонимный пользователь получает в localstorage или в куку свой идентификатор который вечный.
Дальше приложение считывает этот идентификатор, если он уже есть в базе то товары складываются в бд именно для этого пользователя, если нет то просто в локалстораге.
После логина все уходит в бд и хранится только там.