Если пользователь зарегистрировался и вошел в кабинет, то хранить в базе данных.
Если пользователь не зарегистрирован, то хранить в localStorage или в IndexedDB, просто потому что куки и сессия может быстро протухнуть, а это очень сильно разочаровывает, когда ты накидал интересных вещей в корзину, а через некоторое время открыл сайт, а в корзине пусто.
Если пользователь незарегистрированным накидал в корзину товаров, то если он зарегистрируется, то сохранить корзину в базу данных.