Насколько я помню, сессия работает до закрытия браузера и в зависимости от настроек на сервере.
Минусы:
- у пользователя сессия может удалиться при автоочистке сессий
- если хранение сессий производится на жестком диске и автоочистка не настроена, можете столкнуться с ситуацией когда у вас inode закончаться.
- не гарантируется сохранение состояния после закрытия браузера
Лучше использовать такую практику:
- для пользователя создавать в бд корзину если не создана.
- далее получив id сохранять его в cookie или localstorage.
- далее мы синхронизируем корзину ajax запросами - добавили товар, отправили запрос в бд.
Из плюсов данного подхода:
- товары в корзине будут оставаться при повторном заходе пользователя(главное не забыть при установке cookie время хранения необходимое поставить)
- появляется возможность собрать статистику по корзинам пользователей, которые не сделали заказ