Поделиться через


Режимы состояний сеанса

Обновлен: Ноябрь 2007

Состояние сеанса ASP.NET поддерживает несколько различных параметров хранения данных сеанса. Каждый параметр определяется значением в перечислении SessionStateMode. В следующем перечне описываются доступные режимы состояний сеанса:

  • Режим InProc, в котором состояния сеанса хранятся в памяти на веб-сервере. Это режим работы по умолчанию.

  • Режим StateServer, в котором состояния сеанса хранятся в отдельном процессе, называемом службой состояния ASP.NET. Этот режим гарантирует, что состояние сеанса сохраняется при перезапуске веб-приложения, а также делает состояние сеанса доступным для нескольких веб-серверов в веб-ферме.

  • Режим SQLServer, в котором состояние сеанса сохраняется в базе данных SQL Server. Этот режим гарантирует, что состояние сеанса сохраняется при перезапуске веб-приложения, а также делает состояние сеанса доступным для нескольких веб-серверов в веб-ферме.

  • Режим Custom, который позволяет указать поставщика пользовательского хранилища.

  • Режим Off, который отключает состояние сеанса.

Можно указать, какой режим должно использовать состояние сеанса ASP.NET, путем присвоения значений перечисления SessionStateMode атрибуту mode элемента SessionState в файле Web.config приложения. Для режимов, отличных от InProc и Off, требуются дополнительные параметры, такие как значения строки подключения, как описано далее в этом разделе. Можно просмотреть состояние выбранного в текущий момент сеанса с помощью значения свойства HttpSessionState.Mode.

Внутрипроцессный режим

Внутрипроцессный режим — это режим состояния сеанса по умолчанию; он задается с помощью значения InProc перечисления SessionStateMode. Внутрипроцессный режим хранит значения и переменные состояния сеанса в памяти на локальном веб-сервере. Это единственный режим, который поддерживает событие Session_OnEnd. Дополнительные сведения о событии Session_OnEnd см. в разделе События состояния сеанса.

ms178586.alert_caution(ru-ru,VS.90).gifВнимание!

Если включен режим "веб-сад" путем установки атрибута webGarden в значение true в элементе processModel файла Web.config приложения, не следует использовать режим состояния сеанса InProc. Если это сделать, может произойти потеря данных из-за обслуживания разных запросов одного сеанса разными рабочими процессами.

Режим состояния сервера

Режим StateServer сохраняет состояние сеанса в процессе, называемом состоянием службы ASP.NET, который отделен от рабочего процесса ASP.NET или пула приложений IIS. Использование этого режима гарантирует, что состояние сеанса сохраняется при перезапуске веб-приложения, а также делает состояние сеанса доступным для нескольких веб-серверов в веб-ферме.

Перед включением режима StateServer следует убедиться, что служба состояния ASP.NET запущена сервере, используемом для хранения сеанса. Служба состояния ASP.NET устанавливается в качестве службы при установке ASP.NET и .NET Framework. Служба состояния ASP.NET устанавливается в следующем расположении:

корневая_папка_системы\Microsoft.NET\Framework\Номер_версии\aspnet_state.exe

Чтобы настроить приложение ASP.NET для использования режима StateServer, необходимо внести в файл Web.config приложения следующие изменения:

В следующем примере показана настройка конфигурации для режима StateServer, в котором состояние сеанса хранится на удаленном компьютере с именем SampleStateServer:

<configuration>
  <system.web>
    <sessionState mode="StateServer"
      stateConnectionString="tcpip=SampleStateServer:42424"
      cookieless="false"
      timeout="20"/>
  </system.web>
</configuration>
ms178586.alert_note(ru-ru,VS.90).gifПримечание.

Объекты, хранящиеся в состоянии сеанса, должны быть сериализуемыми, если задан режим StateServer. Сведения о сериализуемыех объектах см. в описании класса SerializableAttribute.

Чтобы использовать режим StateServer в веб-ферме, необходимо иметь одинаковые ключи шифрования, указанные в элементе machineKey веб-конфигурации для всех приложений, которые являются частью веб-фермы. Сведения о способах создания компьютерных ключей содержатся в статье с номером 313091, "Создание ключей с помощью Visual Basic .NET для использования при проверке подлинности форм", в базе знаний корпорации Майкрософт на веб-узле https://support.microsoft.com.

Режим SQL Server

В режиме SQLServer состояние сеанса сохраняется в базе данных SQL Server. Использование этого режима гарантирует, что состояние сеанса сохраняется при перезапуске веб-приложения, а также делает состояние сеанса доступным для нескольких веб-серверов в веб-ферме.

ms178586.alert_note(ru-ru,VS.90).gifПримечание.

Если задан режим SQL Server, то объекты, хранящиеся в состоянии сеанса, должны быть сериализуемыми. Сведения о сериализуемыех объектах см. в описании класса SerializableAttribute.

Прежде чем использовать режим SQLServer, необходимо убедиться, что база данных состояния сеанса ASP.NET установлена на SQL Server. Можно установить базу данных состояния сеанса ASP.NET с помощью средства Aspnet_regsql.exe, как описано далее в этом разделе.

Чтобы настроить приложение ASP.NET для использования режима SQLServer, следует внести в файл Web.config приложения следующие изменения:

В следующем примере показана установка конфигурации для режима SQLServer, в котором состояние сеанса хранится на SQL Server с именем "SampleSqlServer":

<configuration>
  <system.web>
    <sessionState mode="SQLServer"
      sqlConnectionString="Integrated Security=SSPI;data 
        source=SampleSqlServer;" />
  </system.web>
</configuration>
ms178586.alert_note(ru-ru,VS.90).gifПримечание.

Если указать доверительное соединение с SQL Server в файле конфигурации с помощью атрибута sqlConnectionString элемента SessionState, то SessionStateModule подключится к SQL Server с использованием встроенных средств безопасности SQL Server. Соединение будет выполняться с помощью идентификации процесса ASP.NET или учетных данных пользователя, предоставленных для элемента конфигурации идентификация, если таковые существуют. Можно задать, какая олицетворенная идентификация IIS должна использоваться вместо, указав <identity impersonate="true" /> и установив атрибут useHostingIdentity элемента конфигурации sessionState в значение false. Дополнительные сведения об идентификации процесса ASP.NET см. в разделах Настройка удостоверения процесса ASP.NET и Олицетворение ASP.NET.

Для настройки режима SQLServer для веб-фермы следует в файле конфигурации для каждого веб-сервера установить атрибут sqlConnectionString элемента sessionState, указывающий на ту же базу данных SQL Server. Путь для приложения ASP.NET в метабазе IIS должен совпадать на всех веб-серверах, которые совместно используют состояние сеанса из базы данных SQL Server. Описание способа разрешения проблемы разных путей приложения на разных серверах см. в статье "PRB. Потеря состояния сеанса в веб-ферме при использовании режима сеанса SqlServer или StateServer" с номером 325056 в базе знаний корпорации Майкрософт на веб-узле https://support.microsoft.com.

Установка базы данных состояния сеанса с помощью средства Aspnet_regsql.exe

Чтобы установить базу данных состояния сеанса на SQL Server, следует выполнить средство Aspnet_regsql.exe, расположенное в папке корневая_папка_системы\Microsoft.NET\Framework\ номер_версии на веб-сервере. Следует с помощью команды указать следующие сведения:

  • Имя экземпляра SQL Server с помощью параметра -S.

  • Учетные данные входа для учетной записи, которая имеет разрешение на создание базы данных на SQL Server. Можно с помощью параметра -E воспользоваться данными уже вошедшего пользователя, или с помощью параметра -U указать идентификатор пользователя, а с помощью параметра -P — пароль этого пользователя.

  • Параметр -ssadd для добавления базы данных состояния сеанса.

    По умолчанию нельзя использовать средство Aspnet_regsql.exe для установки базы данных состояния сеанса на экспресс-выпуск SQL Server. Чтобы запустить средство Aspnet_regsql.exe для установки базы данных на экспресс-выпуск SQL Server, необходимо сначала включить параметр SQL Server Agent XPs с помощью следующих команд T-SQL:

    EXECUTE sp_configure 'show advanced options', 1
    RECONFIGURE WITH OVERRIDE
    GO
    
    EXECUTE sp_configure 'Agent XPs', 1
    RECONFIGURE WITH OVERRIDE
    GO
    
    EXECUTE sp_configure 'show advanced options', 0
    RECONFIGURE WITH OVERRIDE
    GO
    

    Необходимо выполнить эти команды T-SQL для каждого экземпляра экспресс-выпуска SQL Server, где отключен параметр Agent XPs.

По умолчанию средство Aspnet_regsql.exe создаст базу данных с именем ASPState, содержащую хранимые процедуры, которые поддерживают режим SQLServer. Данные самого сеанса по умолчанию хранятся в базе данных tempdb. Можно использовать параметр -sstype, чтобы изменить место хранения данных сеанса. В следующей таблице указаны возможные значения для параметра -sstype:

Параметр

Описание

t

Хранит данные сеанса в базе данных SQL Server с именем tempdb. Это режим работы по умолчанию. Если хранить данные сеанса в базе данных tempdb, то они теряются при перезапуске SQL Server.

p

Хранит данные сеанса в базе данных ASPState, а не в базе данных tempdb.

c

Хранит данные сеанса в пользовательской базе данных. Если указан параметр c, необходимо также включить имя пользовательской базы данных с помощью параметра -d.

Например, следующая команда создает базу данных с именем ASPState на экземпляре SQL Server с именем "SampleSqlServer" и указывает, что данные сеанса также хранятся в базе данных ASPState:

aspnet_regsql.exe -S SampleSqlServer -E -ssadd -sstype p

ms178586.alert_note(ru-ru,VS.90).gifПримечание.

При запуске ASP.NET 1.0 или ASP.NET 1.1 нельзя использовать средство Aspnet_regsql.exe, чтобы настроить ASP.NET для хранения состояния сеанса в постоянной базе данных SQL Server. Однако можно получить сценарии для хранения состояния сеанса в постоянной базы данных. Подробные сведения см. в статье "Практическое руководство. Настройка ASP.NET для постоянного управления состоянием сеанса SQL Server" с номером 311209 в базе знаний корпорации Майкрософт на веб-узле https://support.microsoft.com. Кроме того, веб-серверы с ASP.NET 1.0 или ASP.NET 1.1 могут направлять устойчивое состояние сеанса на SQL Server, на котором установлена схема состояния сеанса ASP.NET 2.0.

В режиме SQLServer можно настроить несколько компьютеров, работающих под управлением SQL Server, для работы в качестве отказоустойчивого кластера, который состоит из двух или более идентичных компьютеров, на которых выполняется SQL Server, хранящий данные одной базы данных. При сбое одного компьютера, на котором запущен SQL Server, другой сервер в кластере может заменить его и обслуживать запросы без потери данных сеанса. Чтобы настроить режим для отказоустойчивого кластера SQL Server, необходимо указать -sstype p при выполнении средства Aspnet_regsql.exe, чтобы данные состояния сеанса хранились в базе данных ASPState вместо базы данных tempdb. Хранение состояния сеанса в базе данных tempdb не поддерживается для кластера SQL Server. Дополнительные сведения о настройке режима SQL Server для отказоустойчивого кластера см. в статье "Использование режима SQL Server состояния сеанса ASP.NET в отказоустойчивом кластере" под номером 323262 в базе знаний корпорации Майкрософт на веб-узле https://support.microsoft.com.

Пользовательский режим

Режим Custom указывает, что данные состояния сеанса сохраняются с помощью пользовательского поставщика хранилища сеанса состояния. При настройке приложения ASP.NET для работы в режиме Custom Mode необходимо указать тип поставщика хранилища состояния сеанса с помощью вложенного элемента providers элемента конфигурации sessionState. Тип поставщика задается с помощью вложенного элемента add с включением атрибута type, который определяет имя типа поставщика, и атрибута name, который определяет имя экземпляра поставщика. Имя экземпляра поставщика затем предоставляется атрибуту customProvider элемента SessionState для настройки состояния сеанса ASP.NET на использование этого экземпляра поставщика для хранения и извлечения данных сеанса.

В следующем примере показаны элементы из файла Web.config, которые определяют, что состояние сеанса ASP.NET использует пользовательского поставщика хранилища состояния сеанса:

<configuration>
  <connectionStrings>
    <add name="OdbcSessionServices" 
      connectionString="DSN=SessionState;" />
  </connectionStrings>

  <system.web>
    <sessionState 
      mode="Custom"
      customProvider="OdbcSessionProvider">
      <providers>
        <add name="OdbcSessionProvider"
          type="Samples.AspNet.Session.OdbcSessionStateStore"
          connectionStringName="OdbcSessionServices" 
          writeExceptionsToEventLog="false" />
      </providers>
    </sessionState>
  </system.web>
</configuration>

Дополнительные сведения о пользовательских поставщиках хранилища состояния сеанса см. в разделе Реализация поставщика хранилища состояний сеансов.

ms178586.alert_note(ru-ru,VS.90).gifПримечание.

Пользовательский поставщик хранилища состояния сеанса получит доступ к любому защищенному ресурсу, такому как SQL Server, с помощью идентификации процесса ASP.NET или учетных данных пользователя, предоставленных в элемент конфигурации идентификация, если они существуют. Можно задать, какая олицетворенная идентификация IIS должна использоваться вместо, указав <identity impersonate="true" /> и установив атрибут useHostingIdentity элемента конфигурации sessionState в значение false. Дополнительные сведения об идентификации процесса ASP.NET см. в разделах Настройка удостоверения процесса ASP.NET и Олицетворение ASP.NET.

См. также

Основные понятия

Общие сведения о состоянии сеанса ASP.NET

Общие сведения об управлении состоянием ASP.NET

Ссылки

Элемент providers для элемента sessionState (схема параметров ASP.NET)