2009-09-03 1 views
1

Я пытаюсь понять, когда я могу поместить определенные объекты в сеанс пользователей, и мне интересно, как хранится сессия и какие значения извлекаются из нее. Если я сделаю запрос на извлечение ключа А из состояния сеанса, он также прочитает «Ключ Б»?Когда запрос делается для получения объекта из сеанса пользователя, загружается ли весь сеанс?

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

Итак, если мое состояние 20 КБ, и я хочу получить значение, которое составляет 5 КБ, он будет читать все 20 КБ или только 5 КБ, которые мне нужны?

ответ

2

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

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

Есть несколько вариантов для управления этим, однако, и вы можете найти отличную ссылку здесь:

http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx

+0

ViewState помещается в скрытое поле, а не состояние сеанса. Состояние сеанса остается в памяти на сервере, поэтому при использовании фермы серверов сеанс может быть потерян, если пользователь будет переназначен на другой сервер при последующем запросе или обновлен пул приложений серверов. – NerdFury

+0

Извините, я прочитал неправильно. Вы сказали, что состояние зрения. – NerdFury

0

По умолчанию сеанса пользователей сохраняются в памяти. Вы можете настроить его для хранения в базе данных, но он сериализуется и полностью считывается при повторной инстанцировании.

Так что да, если у вас есть данные на 20 КБ в сеансе пользователей, он всегда будет использовать 20 КБ памяти.