Какой объем данных вы можете / должны хранить в объекте сеанса пользователя?

StackOverflow https://stackoverflow.com/questions/73008

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top