ASP.NET Жизненный цикл. Сохранение сеанса в базе данных - PullRequest
1 голос
/ 30 ноября 2011

У меня есть приложение ASP.NET, которое использует режим сеанса SQLServer. Я создал свойство ниже на моей странице.

internal List<string> TargetTypes
{
    get { return Session["TargetTypes"] != null ? Session["TargetTypes"] as List<string> : null; }
    set { Session["TargetTypes"] = value; }
}

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

TargetTypes.Add("Value1");
TargetTypes.Add("Value2");
TargetTypes.Add("Value3");

Меня беспокоит то, как управляется Сессия. ASP читает / пишет в базу данных каждый раз, когда я получаю доступ к этому свойству? Или есть событие, которое используется для сохранения всех сеансов в базе данных?

1 Ответ

4 голосов
/ 30 ноября 2011

как управляется сессия?

Когда браузер отправляет запрос на ваш сайт, сервер генерирует UID с именем sessionid и этот 'Sessionid' управляется в Session Table. На сервере создается таблица для управления идентификатор сессии для различных веб-клиентов (браузеров). Этот идентификатор сеанса отправляется клиенту. после этого сеанса также отправляется на сервер после первого запроса.

Есть два режима InProc и OutProc (Sql-сервер, сервер состояний и т. Д.). Проверьте эти ссылки для получения дополнительной информации:
Управление состоянием сеанса в Asp.net
Состояние сеанса

Когда вы устанавливаете <sessionState mode="SQLServer", он сохраняет значения сеанса в базе данных sql. Перейдите по этой ссылке, чтобы узнать, как SessionState работает в режиме StateServer.
Быстрое, масштабируемое и безопасное управление состоянием сеанса для ваших веб-приложений

ASP читает / пишет в базу данных каждый раз, когда я получаю доступ к этому недвижимость?

Состояние сеанса управляется классом SessionStateModule, который вызывает поставщика хранилища состояний сеанса для чтения и записи данных сеанса в хранилище данных в разное время во время запроса. В начале запроса экземпляр SessionStateModule извлекает данные из источника данных, вызывая метод GetItemExclusive, или, если для атрибута страницы EnableSessionState было установлено значение ReadOnly, путем вызова метода GetItem. В конце запроса, если значения состояния сеанса были изменены, экземпляр SessionStateModule вызывает метод SessionStateStoreProviderBase.SetAndReleaseItemExclusive для записи обновленных значений в хранилище состояния сеанса. Следуйте this для получения более подробной информации и проверьте SessionState Overview для уточнения вопросов как second, так и third.

Относительно вашего фрагмента кода: при первом запуске сеанса все значения будут нулевыми, поэтому вы должны проверить, является ли сеанс новым. как вы делаете в Getter.

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