1. Сейчас поведение корзины OpenCart / ocStore такое:
Корзина хранится в сессии (т.е. в спец. файле на сервере), но при перезапуске браузера сессия удаляется (вместе со всем содержимым корзины, естественно).
Единственным недостатком этого метода является удаление корзины, но зато всё предсказуемо и понятно.
2. Можно это поведение изменить путём регулирования времени жизни сессии. Тогда корзина клиента не будет очищаться после перезапуска браузера, но очистится после истечения времени жизни сессии. Причём при таком варианте возможны случаи, когда клиент зашел на сайт - сессия установилась. Через месяц он снова зашёл на сайт, добавил товары в корзину и решил оформить покупку, но корзина уже пустая т.к. время жизни сессии (месяц) только что истекло. Да и время жизни сильно большое не поставишь, т.к. могут закончиться имена для сессионных файлов (ну не предназначены они для этого).
3. Можно перенести хранение корзины в куки. Тогда товары не исчезнут из корзины неожиданно и ещё можно будет задать время хранения куки побольше (время будет отсчитываться с момента последнего захода на сайт). Но у кук есть ограничения на размер, т.е. сильно много товаров в корзину не добавишь.
4. Обойти это ограничение (см. пункт 3) можно путём просьбы зарегистрироваться или войти в свой аккаунт, если товаров станет сильно много.
Здесь у меня возникают вопросы: а) - сколько товаров сразу у вас обычно покупают (добавляют в корзину)?; б) - сколько максимум товаров у вас когда-либо покупали за один раз?
Приблизительный подсчёт показал, что если взять за ограничение куки в 2 килобайта, то поместится около 50 товаров. Ещё один недостаток здесь в том, что эти 2 килобайта будут при каждой загрузке передаваться на сервер (трафик).
5. Можно не просить клиента зарегаться, а сохранить расширенный список товаров в сессии. Тогда при перезапуске браузера потеряется не вся корзина, а только та её часть, которая не поместилась в куках. Но зато, если клиент оформит покупку без перезапуска браузера, то всё будет работать как и сейчас.
6. Или можно оставить как есть, но для зарегистрированных клиентов хранить корзину между сессиями в базе данных.
----
Прошу голосовать и высказываться. Если ничего не поняли, то лучше не голосуйте.