Строите приложение ASP.NET без состояния сеанса?

Я только что закончил смотреть сеанс Стефана Шакова PDC 2009, и он упомянул, что удивлен, что люди все еще используют сеанс Состояние в ASP.NET. Состояние сеанса даже используется для внутренних целей в ASP.NET. MVC.

Поработав с унаследованным приложением, в котором все помещается во "внутрипроцессный" сеанс (даже с данными!), Я лично видел злоупотребление сеансом.

Есть ли способ создать приложение ASP.NET без состояния сеанса? Как бы вы хранили информацию для каждого этапа типичного рабочего процесса электронной коммерции?


person Herman    schedule 22.11.2009    source источник


Ответы (3)


Я не использовал сеанс годами. Если вам нужно отслеживать прогресс пользователя между страницами (например, посредством процесса оформления заказа в корзине), сохраните любую требуемую информацию о состоянии в базе данных и свяжите ее с пользователем с помощью файла cookie.

Стоит отметить, что .NET поддерживает различные механизмы «сеанса», один из которых хранит информацию в базе данных (что, на мой взгляд, гораздо предпочтительнее), а не в процессе.

person 3Dave    schedule 22.11.2009
comment
Насколько масштабируемо ваше решение в среде с высоким трафиком? Будет ли проблема производительности чтения / записи объекта сеанса из базы данных для каждого веб-запроса? - person Herman; 23.11.2009
comment
Краткий ответ на этот вопрос - попробуй и увидишь. однако мы используем SQL для управления сеансами на сайте с относительно высокой посещаемостью и не наблюдаем никаких проблем с производительностью. Помните, что БД предназначена для такого рода вещей - быстрых, легких запросов и ответов. Я был бы очень удивлен, если бы вам удалось заглушить приличный сервер базы данных с помощью такого подхода. - person 3Dave; 23.11.2009
comment
Мы также используем состояние сеанса SQL на сайте с очень высокой посещаемостью. Никаких проблем с производительностью. Однако иногда он дает много странных ошибок, таких как не удается подключиться к базе данных или не удается найти базу данных tempdb, где хранится сеанс. Еще не понял этого. - person Artur Kędzior; 16.11.2011

У вас есть следующие варианты: файлы cookie, база данных, строка запроса, переменные страницы и кеш сервера, чтобы попытаться справиться с природой Интернета без сохранения состояния. У каждого есть свой компромисс, но, прагматично говоря, в настоящее время я использую сеанс, который сохраняется в базе данных. Это хорошо масштабируется для серверных ферм, помогает сохранить небольшой размер страниц и легко реализуется.

person Trent    schedule 22.11.2009

Ознакомьтесь с профилями членства ASP.NET. Он позволяет вам сериализовать и хранить / извлекать объекты для каждой учетной записи пользователя, независимо от того, является ли пользователь анонимным или нет. Мне удалось успешно использовать это с длинными онлайн-приложениями типа волшебника.

person Community    schedule 22.11.2009
comment
Из-за своей природы (хранится в скрытом поле формы) viewstate не работает на нескольких страницах. - person Kyle Trauberman; 22.11.2009
comment
Не забудьте объяснить, почему голосование против? Я имею в виду, Дэвид Лайвли предложил то же самое после того, как я написал это и получил отрицательный голос? - person ; 23.11.2009
comment
Я не уверен, что то, что вы предложили, совпадает с предложением Дэвида Лайвли. Заметьте, я ничего не спрашивал о профилях членства, мой вопрос намного ограничен. - person Herman; 23.11.2009
comment
Я не знаю, что сказать. Вы спросили, как обрабатывать данные, кроме помещения их в сеанс. Я сказал, что существует существующая структура, которая поставляется вместе с ASP.NET 2.0, которая позволяет вам сериализовать эти данные и сохранить их в базе данных. Разве это не то, о чем был другой пост? Думаю, я просто не понимаю, почему я вообще получил голос против. Если вы не согласны с предложением, по крайней мере, оставьте комментарий, когда вы голосуете против. Тем не менее, спасибо за разъяснения позже. - person ; 24.11.2009