ASP.NET - Хранение классов в переменных сеанса - Как это работает (память)? - PullRequest
5 голосов
/ 31 марта 2011

Я читал, что вы можете хранить классы непосредственно в переменной сеанса, т.е.

Session["var"] = myclass;

Мой вопрос заключается в том, как работает управление памятью.Это автоматически сериализует это в сеанс на стороне клиента?

Или он хранит данные для экземпляра класса в памяти сервера и просто содержит ссылку в объекте сеанса?

Ответы [ 4 ]

12 голосов
/ 31 марта 2011

ASP.Net сохранит ваш объект в вложенном словаре static в памяти на сервере.
Затем он отправляет файл cookie клиенту с идентификатором сеанса.

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

(Так работает поставщик сеансов по умолчанию: другие поставщики могут сериализовать объекты в SQL Server или делать что-то еще полностью)

5 голосов
/ 31 марта 2011

Вы сохраняете не классы в сеансе, а экземпляры этих классов. И да, хранилище сеансов по умолчанию - это память . Однако вы можете использовать SQL Server в качестве хранилища сеансов. Затем произойдет некоторая сериализация.

Данные сеанса не доступны на стороне клиента.

1 голос
/ 31 марта 2011

Хранилище сеансов по умолчанию находится в памяти. Что проще всего использовать, потому что объекты не обязательно должны быть сериализуемыми.

Если вы изменили хранилище сеансов, скажем, на SQL SERVER Database. Тогда все объекты, которые вы храните в сеансе, должны быть сериализуемыми, иначе они вызовут исключение.

Ваша сессия по умолчанию длится всего 20 минут. Вы можете изменить это в файле web.config так долго, как вы хотите. Но по истечении этого времени сборщик мусора удалит его из памяти.

1 голос
/ 31 марта 2011

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

Объект никогда не отправляется клиенту, потому что у клиента есть только cookie-файл, а cookie-файлы слишком малы, чтобы вместить большую часть чего-либо, и, кроме того, отправка объекта клиенту, вероятно, является проблемой безопасности.

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

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