Сколько данных можно / нужно хранить в объекте сеанса пользователя? - PullRequest
8 голосов
/ 16 сентября 2008

На нашем веб-сайте есть несколько приложений в форме мастера, где мы собираем информацию от пользователя на каждой странице и затем отправляем в бэкэнд-процесс с помощью веб-службы.

К сожалению, мы не можем отправлять информацию порциями во время каждой отправки формы, поэтому мы должны сохранять ее в сеансе пользователей до конца процесса и отправлять ее одновременно.

Является ли объем серверной памяти / дисковое пространство сервера sql единственным ограничением того, сколько я могу хранить в пользовательских сессиях, или мне нужно учесть что-то еще?

Редактировать. Сайт построен на веб-формах ASP.NET.

Ответы [ 5 ]

3 голосов
/ 16 сентября 2008

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

В качестве альтернативы вы можете использовать viewstate для хранения информации, хотя это может привести к тому, что между сервером и клиентом будут отправляться большие объемы данных, а не мое предпочтительное решение.

Количество информации о сеансе, которую вы должны хранить, сильно разнится в зависимости от приложения, количества ожидаемых пользователей, спецификации сервера и т. Д. Чтобы получить более точный ответ, потребуется больше информации:)

Наконец, если предположить, что информация, собираемая на протяжении всего процесса, не требуется от страницы к странице, тогда вы можете хранить всю информацию в таблице базы данных и хранить только уникальный идентификатор записей в сеансе. Когда каждая страница отправляется, запись в БД обновляется, а затем на последней странице извлекается и отправляется вся информация. Это не идеальное решение, если вам нужно извлекать предыдущую информацию на каждой последующей странице из-за необходимого количества операций чтения из БД.

2 голосов
/ 16 сентября 2008

Вы также можете иметь 1 страницу asp со всей HTML-формой и скрывать ее части, пока пользователь не заполнит и не "отправит" видимую часть ...

затем просто скрыть заполненную часть и показать следующую часть формы ...

Это было бы чрезвычайно легко в .NET Framework, использовать панели для каждого "шага мастера" и добавлять логические, когда нужно отображать и скрывать каждую панель.

тогда у вас будут все данные на одной странице.

0 голосов
/ 27 июня 2009

Сессия, viewstate, база данных. Все это медленно, но выполнит работу.

Скрытые поля формы - это ответ, который мне нравится больше всего.

Есть и другие способы сохранить государство. Файлы cookie, всплывающее окно, набор фреймов или фреймы.

0 голосов
/ 16 сентября 2008

Поскольку с точки зрения производительности проблематично хранить большие объемы данных в пользовательском объекте Session, ASP.Net предлагает некоторые другие обходные пути, помимо упомянутых в постах выше. ASP.NET Profile Provider позволяет сохранять информацию, относящуюся к сеансу, в базе данных. Вы также можете использовать Session State Server , который использует отдельный сервер для хранения всей информации о сеансе. Обе эти ситуации учитывают, что если вам нужно использовать кластеры или балансировщики нагрузки, серверы могут по-прежнему распознавать информацию о сеансе на разных серверах. Если вы храните информацию в объекте Http Session, вы сталкиваетесь с проблемой, что один пользователь всегда должен посещать один и тот же сервер для этого сеанса.

0 голосов
/ 16 сентября 2008

Если вы используете традиционную модель HTTP (т.е. не используете runat = "server"), вы можете опубликовать данные на другой странице asp и поместить опубликованные данные в скрытые элементы формы, вы можете сделать это для любого количества страниц, которые вы Таким образом, нужно избегать помещения чего-либо в переменную сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...