Modos de estado de sessão

Estado de sessão do ASP.NET suporta várias opções diferentes de armazenamento para dados da sessão.Cada opção é identificada por um valor na enumeração SessionStateMode.A lista a seguir descreve os modos de estado de sessão disponíveis:

  • Modo InProc, que armazena estado de sessão na memória do servidor Web.Este é o padrão.

  • Modo StateServer, que armazena o estado de sessão em um processo separado chamado de serviço de estado ASP.NET.Isso garante que o estado da sessão é preservado se o aplicativo da Web for reiniciado e também disponibiliza o estado da sessão para vários servidores Web em um farm da Web.

  • Modo SQLServer armazena o estado de sessão em um banco de dados SQL Server.Isso garante que o estado da sessão é preservado se o aplicativo da Web for reiniciado e também disponibiliza o estado da sessão para vários servidores Web em um farm da Web.

  • Modo Custom, que permite que você especifique um provedor personalizado de armazenamento.

  • Modo Off, que desativa estado de sessão.

Você pode especificar qual modo você deseja que seu estado de sessão ASP.NET use, atribuindo valores de enumeração SessionStateMode ao atributo mode do elemento sessionState no arquivo web.config do aplicativo.Modos diferentes de InProc e Off requerem parâmetros adicionais, como valores de sequências de conexões conforme discutido posteriormente neste tópico.Você pode exibir o estado de sessão selecionado no momento, acessando o valor da propriedade HttpSessionState.Mode.

Modo em processo

Modo em processo é o modo padrão de estado de sessão e é especificado usando o valor de enumeração InProcSessionStateMode.Modo em processo armazena valores de estado de sessão e variáveis na memória no servidor Web local.É o único modo que suporta o evento Session_OnEnd.Para obter mais informações sobre o evento Session_OnEnd, consulte Eventos de Estado de Sessão.

Cuidado:

Se você ativar modo Web garden, definindo o webGarden atributo à true no processModel elemento do arquivo Web.config do aplicativo, não use InProc modo de estado de sessão. Se você fizer isso, perda de dados pode ocorrer se solicitações diferentes para a mesma sessão são servidas por diferentes processos.

Modo de servidor de estado

Modo StateServer armazena estado de sessão em um processo, conhecido como o serviço de estado ASP.NET, que é separado do processo do operador do ASP.NET ou Pool de aplicativos IIS.Usar esse modo garante que o estado da sessão seja preservado se o aplicativo da Web for reiniciado e também disponibiliza o estado da sessão para vários servidores Web em um Web farm.

Para usar o modo StateServer, você deve primeiro certificar que o serviço de estado ASP.NET está em execução no servidor usado para o armazenamento de sessão.O serviço de estado ASP.NET é instalado como um serviço quando ASP.NET e o.NET Framework são instalados.O serviço de estado ASP.NET é instalado na localidade a seguir:

systemroot\Microsoft .NET\Framework\versionNumber\aspnet_state.exe

Para configurar um aplicativo ASP.NET para usar o modo StateServer, no arquivo web.config do aplicativo faça o seguinte:

O exemplo a seguir mostra uma configuração para modo StateServer onde o estado de sessão está armazenado em um computador remoto chamado SampleStateServer:

<configuration>
  <system.web>
    <sessionState mode="StateServer"
      stateConnectionString="tcpip=SampleStateServer:42424"
      cookieless="false"
      timeout="20"/>
  </system.web>
</configuration>
Observação:

Objetos armazenados no estado de sessão devem ser serializáveis se o modo for definido como StateServer.Para obter informações sobre objetos serializáveis, consulte a classe SerializableAttribute.

Para usar modo StateServer em um sítio Web, você deve ter as mesmas chaves de criptografia especificadas no elemento machineKey da configuração da Web para todos os aplicativos que fazem parte do sítio Web.Para informações sobre como criar chaves de máquina, consulte o artigo 313091, &quot; Como criar chaves usando o Visual Basic .NET para uso em autenticação de formulários, &quot; no Microsoft Knowledge Base em https://support.microsoft.com.

Modo SQL Server

Modo SQLServer armazena o estado de sessão em um banco de dados SQL Server.Usar esse modo garante que o estado da sessão seja preservado se o aplicativo da Web for reiniciado e também disponibiliza o estado da sessão para vários servidores Web em um Web farm.

Observação:

Objetos armazenados no estado da sessão devem ser serializáveis se o modo for SQL   Server.Para obter informações sobre objetos serializáveis, consulte o SerializableAttribute classe.

Para usar o modo SQLServer, você deve primeiro ter certeza que o banco de dados estado de sessão ASP.NET está instalado em SQL Server.Você pode instalar o banco dados de estado de sessão ASP.NET usando a ferramenta Aspnet_regsql.exe, conforme descrito posteriormente neste tópico.

Para configurar um aplicativo ASP.NET para usar o modo SQLServer, no arquivo web.config do aplicativo faça o seguinte:

O exemplo a seguir mostra uma configuração para modo SQLServer onde o estado de sessão está armazenado em um computador remoto chamado "SampleSqlServer":

<configuration>
  <system.web>
    <sessionState mode="SQLServer"
      sqlConnectionString="Integrated Security=SSPI;data 
        source=SampleSqlServer;" />
  </system.web>
</configuration>
Observação:

Se você especificar uma conexão confiável ao SQL servidor no arquivo de configuração usando o sessionState element's sqlConnectionString attribute, the SessionStateModule will connect to SQL Server using SQL Server integrated security.A conexão será feita usando a identidade do processo ASP.NET ou as credenciais do usuário fornecidas para o Elemento Identidade de configuração, se existirem.Você pode especificar que a identidade do IIS representado seja usada em vez disso, especificando <identity impersonate="true" /> e definindo o atributo useHostingIdentity do elemento de configuração sessionState para false.Para obter mais informações sobre a identidade de processo do ASP.NET, consulte Configurando Identidade de Processo do ASP.NET e ASP.NET Impersonation.

Para configurar o modo SQLServer para um sítio Web, no arquivo de configuração para cada servidor Web, defina o atributo sessionState do elemento sqlConnectionString para apontar para o mesmo banco de dados SQL Server.O caminho para o aplicativo ASP.NET na metabase IIS deve ser idêntico em todos os servidores Web que compartilham o estado da sessão no banco de dados do SQL   Server.Para obter informações sobre etapas para resolver o problema quando aplicativo caminhos diferem entre servidores, consulte artigo 325056, "PRB: Estado de sessão é perdido no Web Farm se você usar SqlServer ou StateServer sessão modo,"na Base de Dados de Conhecimento Microsoft da Microsoft em http://suporte.microsoft.com.

Instalando o banco de dados do estado de sessão usando a ferramenta Aspnet_regsql.exe

Para instalar o banco de dados do estado de sessão no SQL Server, execute a ferramenta Aspnet_regsql.exe localizada na pasta systemroot\Microsoft .NET\Framework\ versionNumber em seu servidor Web.Fornecer as informações com o comando a seguir:

  • Thenome do SQL servidor da instância, usando o -S opção.

  • As credenciais de logon para uma conta que tenha permissão para criar um banco de dados no SQL   Server.Use a opção -E para usar o usuário conectado no momento, ou utilize a opção -U para especificar uma identificação de usuário junto com a opção -P para especificar uma senha.

  • A opção -ssadd de linha de comando para adicionar o banco de dados do estado de sessão.

    Por padrão, você não pode usar a ferramenta Aspnet_regsql.exe para instalar o banco de dados do estado de sessão no SQL   Server Express Edition.Para executar a ferramenta Aspnet_regsql.exe para instalar um banco de dados SQL Server Express Edition você deve primeiro ativar a opção Agent XPs do SQL Server usando comandos T-SQL como o seguinte:

    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
    

    Você deve executar esses comandos T-SQL para qualquer instância do SQL Server Express Edition onde a opção Agent XPs é desativada.

Por padrão, a ferramenta Aspnet_regsql.exe criará um banco de dados denominado ASPState contendo procedimentos armazenados que oferecem suporte ao modo SQLServer.Dados de sessão são armazenados no banco de dados tempdb por padrão.Opcionalmente, você pode usar a opção -sstype para alterar o local de armazenamento de dados da sessão.A tabela a seguir especifica os valores possíveis para a opção -sstype:

Opção

Descrição

t

Armazena dados de sessão no banco de dados tempdb do SQL   Server.Este é o padrão.Se você armazenar dados de sessão no banco de dados tempdb, os dados de sessão serão perdidas se o servidor SQL   for reiniciado.

p

Armazena dados de sessão no banco de dados ASPState em vez de no banco de dados tempdb.

c

Armazena dados de sessão em um banco de dados personalizado.Se você especificar a opção c, você também deve incluir o nome do banco de dados personalizado usando a opção -d.

Por exemplo, o comando a seguir cria um banco de dados chamado ASPState em uma instância do SQL   Server denominado &quot; SampleSqlServer &quot; e especifica que dados de sessão também são armazenados no banco de dados ASPState:

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

Observação:

Se você estiver executando o ASP.NET 1.0 ou o ASP.NET 1.1, você não pode usar a ferramenta Aspnet_regsql.exe para configurar o ASP.NET para armazenar o estado de sessão em um banco de dados persistente SQL Server.Entretanto, você pode obter scripts para armazenar o estado da sessão de um banco de dados persistentes.Para obter detalhes, consulte o artigo 311209, "HOW TO: Configurar ASP.NET para gerenciamento persistente de estado de sessão do SQL servidor"na Base de Dados de Conhecimento Microsoft da Microsoft em http://suporte.microsoft.com.sistema autônomo alternativa, servidores Web que executam o ASP.NET 1.0 ou ASP.NET 1.1 podem direcionar o estado de sessão persistentes em um SQL servidor com o esquema de estado de sessão ASP.NET 2.0 instalado.

No modo SQLServer, você pode configurar vários computadores com SQL Server para funcionar como um cluster failover, ou seja, dois ou mais computadores idênticos executando o SQL Server que armazena dados para um banco de dados único.Se um computador executando o SQL   Server falhar, outro servidor no cluster pode cubrir e servir solicitações sem perda de dados da sessão.Para configurar modo SQL Server de um cluster failover, você deve especificar -sstype p quando você executar a ferramenta Aspnet_regsql.exe para que dados do estado de sessão sejam armazenados no banco de dados ASPState em vez do banco de dados tempdb.Não há suporte para armazenar o estado da sessão no banco de dados tempdb de um cluster do SQL   Server.Para obter mais informações sobre como configurar Modo SQL   Server para um cluster failover, consulte o artigo 323262, &quot; Como: usar o modo SQL Server do estado de sessão em um cluster failover &quot; no Microsoft Knowledge Base em https://support.microsoft.com.

Modo personalizado

Modo Custom especifica que você deseja armazenar dados de estado de sessão, usando um provedor de armazenamento personalizado de estado de sessão.Quando você configura seu aplicativo ASP.NET com uma Mode de Custom, você deve especificar o tipo do provedor usando o subelemento providers do elemento de configuração sessionState do estado de sessão de armazenamento.Você especifica o tipo do provedor usando um subelemento add e inclui um atributo type que especifica nome do tipo do provedor e um atributo name que especifica o nome da instância do provedor.Em seguida, o nome da instância do provedor é fornecido ao atributo customProvider do elemento sessionState para configurar estado da sessão ASP.NET para usar essa instância do provedor para armazenar e recuperar dados de sessão.

O exemplo a seguir mostra elementos de um arquivo Web.config que especificam que usam estado de sessão ASP.NET de um provedor de armazenamento de estado de sessão personalizado:

<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>

Para obter mais informações sobre estado de sessão personalizado armazenamento provedores, consulte Implementar um Provedor de Armazenamento de Estado da Sessão.

Observação:

Um provedor de armazenamento de estado de sessão personalizado irá acessar qualquer recurso protegido, sistema autônomo o SQL servidor, usando a identidade de processo ASP.NET ou sistema autônomo credenciais do usuário fornecidas para o identidadeelemento de configuração da , se existirem.Você pode especificar que a identidade do IIS representado seja usada em vez disso, especificando <identity impersonate="true" /> e definindo o atributo useHostingIdentity do elemento de configuração sessionState para false.Para obter mais informações sobre a identidade de processo do ASP.NET, consulte Configurando Identidade de Processo do ASP.NET e ASP.NET Impersonation.

Consulte também

Conceitos

Visão geral sobre Estado de sessão ASP.NET

Visão Geral sobre o Gerenciamento de Estado do ASP.NET

Referência

provedores de elemento para sessionState (ASP.NET Settings Esquema)