USE
Насчет срока действия сессии спорно: сегодня посмотрел, выбрал, но решил подумать, либо на счете не оказалось достаточной суммы; через неделю вернулся, а пакет заказов уже пропал - придется все делать заново.
Возможно, срок действия сессии стоит сделать чуть больше, чем срок действия цен на уже выбранный товар. Таким образом, вернувшийся через неделю пользователь получит-таки сформированный им пакет, но, естественно, цена будет пересчитана.
Хотя, для таких случаев можно предусмотреть кнопку "отложить покупку" - с сохранением заказа в базе со статусом "отложен" и возможностью последующей его разморозки в течение, скажем, месяца с пересчетом цен по текущему на момент возобновления прайс-листу, а юзеру ставить долгоживущую куку, по которой система его потом вспомнит. В таблицу писать дату и код товара, ежедневно автоматически вычищать все, что старше месяца. Для тех, кто не воспользовался кнопкой, срок действия сессии установить, скажем, в 48 часов.
Спросите, зачем тогда мы уходили от БД к сессиям, раз все равно мы будем в нее что-то писать? Поясню: писать мы будем минимум информации и в отдельную таблицу - раз, писать будем далеко не всех, а только пользователей, чья конвертация в покупателей будет заведомо выше - два, при записи отложенной покупки мы попросим пользователя зарегистрироваться, а потом сможем прислать ему напоминание по почте - три.
----------------------
Да, согласен, что в большинстве случаев такой проработки нюансов попросту не нужно. Однако, в случае разработки большого серьезного ресурса (где, как правило, наличествует свой штат разработчиков) такие моменты вполне могут быть продуманы и реализованы.