Есть несколько способов справиться с этим. Основной вопрос заключается в том, как долго вам нужно сохранять информацию о своей корзине (30 минут, 1 час, 1 день, 1 неделя и т. Д.).
Краткие требования к хранению Простое внедрение (30 минут - 1 час)
Вы можете использовать сеанс с методами страницы, используя HttpContext.Current.Session["key"]
, чтобы вы могли сохранить свое хранилище сеансов таким же, как оно в настоящее время работает для вас. Вы можете вызывать эти методы страницы с помощью jquery ajax довольно легко, и это устранит необходимость в панелях обновления, управлении сценариями и т. Д. Так что, на мой взгляд, это поможет вам на полпути. Ваши страницы будут загружаться быстрее и быстрее реагировать, и вам не придется выбрасывать код, связанный с кэшированием, во время сеанса. Основным недостатком этого является то, что вы все еще используете сеанс, поэтому вы действительно не хотите сохранять сеансы слишком долго, так как это приведет к зависанию сервера, на котором размещен сайт, если он достаточно активен.
Требования к длинному хранилищу Реализация на стороне сервера
То же самое, что и выше, применимо, за исключением того, что вы не используете сеанс и можете использовать веб-службы без сохранения состояния, если хотите. Вы должны сгенерировать GUID для каждого посетителя и сохранить этот GUID в cookie. При каждом вызове ajax вы отправляете этот GUID вместе с данными для сохранения. Эта информация будет храниться в базе данных, идентифицируемой GUID. Если клиент завершает свой заказ, то информация может быть перемещена из базы данных кэша в базу данных выполненных заказов. В этой реализации вы захотите написать какое-либо сервисное или запланированное задание, которое удаляло бы кэшированные заказы (не выполненные) через определенное время, чтобы поддерживать базу данных кэша.
Хорошая особенность этого решения в том, что вы можете иметь довольно долгоживущий кэш, написать несколько отчетов, которые отключают эти кэшированные данные, и нагрузка на ваш веб-сервер будет снижена. Кроме того, если ваш сайт становится более популярным, его легко масштабировать, поскольку вам не нужно беспокоиться о синхронизации сеансов между несколькими веб-серверами.
Требования к длинному хранилищу Реализация на стороне клиента
В этом подходе все еще используются веб-сервисы или методы страниц, но кеширующая база данных не используется. По сути, вы запихиваете всю свою информацию в файл cookie или набор файлов cookie и отключаете его. Возможно, вы все еще сможете получить некоторую информацию, если вы прочитаете содержимое файлов cookie на каждом POST и сохраните их где-то для отчета.
Если вам не нужно отслеживать, что клиенты добавляли, а не заказывали, то основным преимуществом этого решения является то, что вы можете значительно сократить количество POST, которое вам нужно сделать. Вы можете написать в куки (ы) в javascript и просто разместить все, когда они завершают свой заказ. Просто будьте осторожны, чтобы не помещать конфиденциальную информацию в файлы cookie в незашифрованном виде (контактную информацию, платежную информацию и т. Д.), Поскольку существуют способы извлечения данных из файлов cookie из других доменов в некоторых менее безопасных браузерах. Для конфиденциальной информации вы должны отправить ее на сервер и вернуть зашифрованную информацию для хранения в файлах cookie.
Недостатком этого решения является то, что если информация, которую вы хотите сохранить, велика, вы можете столкнуться с максимальным размером файлов cookie и / или с максимальным количеством файлов cookie на ограничение домена. С хорошей стратегией (т. Е. Сохранением идентификатора продукта, а не описания продукта) вы, вероятно, будете в порядке.
Дайте мне знать, если что-либо из перечисленного неясно или у вас есть дополнительные вопросы.
РЕДАКТИРОВАТЬ: Не видел ответа выше, который по существу излагает требования к короткому хранилищу, которые у меня есть. Если это - принятое решение, поставьте ему галочку (он избил меня до этого (=). Оставив мой ответ, поскольку в нем изложены некоторые дополнительные опции.