Modos de estado de sesión

Actualización: noviembre 2007

El estado de sesión de ASP.NET es compatible con distintas opciones de almacenamiento de los datos de la sesión. Cada opción se identifica mediante un valor en la enumeración SessionStateMode. En la lista siguiente se describen los modos de estado de sesión disponibles:

  • Modo InProc, que almacena el estado de sesión en memoria en el servidor Web. Éste es el valor predeterminado.

  • Modo StateServer, que almacena el estado de sesión en un proceso distinto denominado "servicio de estado de ASP.NET". Este modo garantiza que el estado de sesión se mantiene si se reinicia la aplicación Web y que esté disponible también para varios servidores Web en una batería de servidores Web.

  • Modo SQLServer, que almacena el estado de sesión en una base de datos de SQL Server. Este modo garantiza que el estado de sesión se mantiene si se reinicia la aplicación Web y que esté disponible también para varios servidores Web en una batería de servidores Web.

  • Modo Custom, que permite especificar un proveedor de almacenamiento personalizado.

  • Modo Off, que deshabilita el estado de sesión.

Se puede especificar el modo que desea que utilice el estado de sesión de ASP.NET asignando valores de enumeración SessionStateMode al atributo mode del elemento sessionState en el archivo Web.config de la aplicación. Todos los modos, excepto InProc y Off, requieren parámetros adicionales, como valores de cadena de conexión, que se tratan a continuación en este tema. Puede ver el estado de sesión seleccionado actualmente; para ello, consulte el valor de la propiedad HttpSessionState.Mode.

En proceso es el modo de estado de sesión predeterminado y se especifica mediante el valor InProc de la enumeración SessionStateMode. El modo En proceso almacena valores de estado de sesión y variables en memoria en el servidor Web local. Es el único modo que admite el evento Session_OnEnd. Para obtener más información sobre el evento Session_OnEnd, vea Eventos de estado de sesión.

ms178586.alert_caution(es-es,VS.100).gifPrecaución:

Si habilita el modo Hospedaje multiproceso en un único equipo y para ello establece el atributo webGarden en true en el elemento processModel del archivo Web.config de la aplicación, no utilice el modo de estado de sesión InProc. Si lo hace, se puede producir una pérdida de datos si diferentes procesos de trabajo atienden solicitudes distintas para la misma sesión.

El modo StateServer almacena estado de sesión en un proceso, al que se denomina servicio de estado de ASP.NET, que es independiente del proceso de trabajo ASP.NET o grupo de aplicaciones IIS. Con este modo se garantiza que el estado de sesión se mantiene si se reinicia la aplicación Web y que esté disponible también para varios servidores Web en una batería de servidores Web.

Para utilizar el modo StateServer, primero debe asegurarse de que el servicio de estado de ASP.NET se está ejecutando en el servidor remoto utilizado como almacén de la sesión. El servicio de estado de ASP.NET se instala como un servicio cuando se instalan ASP.NET y .NET Framework. El servicio de estado de ASP.NET se instala en la ubicación siguiente:

raízDelSistema\Microsoft.NET\Framework\númeroDeVersión\aspnet_state.exe

Para configurar una aplicación ASP.NET para utilizar el modo StateServer, en el archivo Web.config de la aplicación haga lo siguiente:

En el ejemplo siguiente se muestra una opción de configuración para el modo StateServer donde el estado de sesión se almacena en un equipo remoto denominado SampleStateServer:

<configuration>
  <system.web>
    <sessionState mode="StateServer"
      stateConnectionString="tcpip=SampleStateServer:42424"
      cookieless="false"
      timeout="20"/>
  </system.web>
</configuration>
ms178586.alert_note(es-es,VS.100).gifNota:

Los objetos que están almacenados en el estado de sesión deben ser serializables si el modo está establecido en StateServer. Para obtener información sobre objetos serializables, vea la clase SerializableAttribute.

Para utilizar el modo StateServer en una batería de servidores Web, debe tener las mismas claves de cifrado que se especifican en el elemento machineKey de su configuración Web para todas las aplicaciones que forman parte de la batería de servidores. Para obtener información sobre cómo crear claves del equipo, vea el artículo 313091, "How to create keys by using Visual Basic .NET for use in Forms authentication," en Microsoft Knowledge Base en el sitio http://support.microsoft.com.

El modo SQLServer almacena el estado de sesión en una base de datos de SQL Server. Con este modo se garantiza que el estado de sesión se mantiene si se reinicia la aplicación Web y que esté disponible también para varios servidores Web en una batería de servidores Web.

ms178586.alert_note(es-es,VS.100).gifNota:

Los objetos que están almacenados en el estado de sesión deben ser serializables si el modo utilizado es SQL Server. Para obtener información sobre objetos serializables, vea la clase SerializableAttribute.

Para utilizar el modo SQLServer, primero debe estar seguro de que la base de datos del estado de sesión de ASP.NET esté instalada en SQL Server. Puede instalar la base de datos del estado de sesión de ASP.NET mediante la herramienta Aspnet_regsql.exe, como se describe más adelante en este tema.

Para configurar una aplicación ASP.NET para utilizar el modo SQLServer, en el archivo Web.config de la aplicación haga lo siguiente:

En el ejemplo siguiente se muestra una opción de configuración para el modo SQLServer donde el estado de sesión se almacena en un servidor SQL Server denominado "SampleSqlServer":

<configuration>
  <system.web>
    <sessionState mode="SQLServer"
      sqlConnectionString="Integrated Security=SSPI;data 
        source=SampleSqlServer;" />
  </system.web>
</configuration>
ms178586.alert_note(es-es,VS.100).gifNota:

Si especifica una conexión de confianza con el SQL Server en el archivo de configuración utilizando el atributo sqlConnectionString del elemento sessionState, el SessionStateModule conectará con el SQL Server mediante la seguridad integrada de SQL Server. La conexión se realizará utilizando la identidad del proceso en ASP.NET o las credenciales del usuario proporcionadas para el elemento de configuración de identidad, si existen. Puede especificar que, en su lugar, se utilice la identidad suplantada por IIS definiendo <identity impersonate="true" /> y estableciendo el atributo useHostingIdentity del elemento de configuración sessionState en false. Para obtener más información sobre la identidad de procesos en ASP.NET, vea Configurar la identidad de procesos en ASP.NET y Suplantación de ASP.NET.

Para configurar el modo SQLServer para una batería de servidores Web, en el archivo de configuración para cada servidor Web, establezca el atributo sqlConnectionString del elemento sessionState para que señale a la misma base de datos SQL Server. La ruta de acceso de la aplicación ASP.NET en la metabase de IIS debe ser idéntica en todos los servidores Web que compartan el estado de sesión en la base de datos de SQL Server. Para obtener información sobre los pasos necesarios para solucionar el problema cuando las rutas de aplicación sean diferentes entre los servidores, vea el artículo 325056, "PRB: Estado de sesión se pierde en batería de servidores Web si utiliza modo de sesión SqlServer o StateServer," en el sitio http://support.microsoft.com de Microsoft Knowledge Base.

Instalar la base de datos de estado de sesión mediante la herramienta Aspnet_regsql.exe

Para instalar la base de datos de estado de sesión en SQL Server, ejecute la herramienta Aspnet_regsql.exe que se encuentra en la carpeta raízDelSistema\Microsoft.NET\Framework\númeroDeVersión del servidor Web. Proporcione la información siguiente con el comando:

  • El nombre de la instancia de SQL Server, mediante la opción -S.

  • Las credenciales de inicio de sesión para una cuenta que tiene el permiso para crear una base de datos en SQL Server. Seleccione la opción -E para utilizar el usuario que tiene la sesión actual abierta o utilice la opción -U para especificar un identificador de usuario junto con la opción -P para especificar una contraseña.

  • La opción de la línea de comandos -ssadd para agregar la base de datos de estado de sesión.

    De forma predeterminada, no puede utilizar la herramienta Aspnet_regsql.exe para instalar la base de datos de estado de sesión en SQL Server Express Edition. Para ejecutar la herramienta Aspnet_regsql.exe para instalar una base de datos SQL Server Express Edition, primero debe habilitar la opción Agent XPs SQL Server mediante comandos de T-SQL como los siguientes:

    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
    

    Debe ejecutar estos comandos T-SQL para cualquier instancia de SQL Server Express Edition dónde se deshabilita la opción Agent XPs.

De forma predeterminada, la herramienta Aspnet_regsql.exe creará una base de datos denominada ASPState que contiene procedimientos almacenados que admiten el modo SQLServer. Los datos de la sesión se almacenan de forma predeterminada en la base de datos tempdb. Si lo desea, puede utilizar la opción -sstype para cambiar la ubicación de almacenamiento de los datos de la sesión. La tabla siguiente especifica los valores posibles para la opción -sstype:

Opción

Descripción

t

Almacena los datos de la sesión en la base de datos tempdb de SQL Server. Éste es el valor predeterminado. Si almacena los datos de la sesión en esta base de datos, los datos de la sesión se perderán si se reinicia SQL Server.

p

Almacena los datos de la sesión en la base de datos ASPState en lugar de en la base de datos tempdb.

c

Almacena los datos de la sesión en una base de datos personalizada. Si especifica la opción c, también debe incluir el nombre de la base de datos personalizada utilizando la opción -d.

Por ejemplo, el siguiente comando crea una base de datos llamada ASPState en una instancia de SQL Server denominada "SampleSqlServer" y especifica que los datos de la sesión también se almacenan en la base de datos ASPState:

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

ms178586.alert_note(es-es,VS.100).gifNota:

Si va a ejecutar ASP.NET 1.0 o ASP.NET 1.1, no puede utilizar la herramienta Aspnet_regsql.exe para configurar ASP.NET para almacenar el estado de sesión en una base de datos persistente de SQL Server. Sin embargo, puede obtener scripts para almacenar estados de sesión en una base de datos persistente. Para obtener información detallada, vea el artículo 311209 ("HOW TO: Configure ASP.NET for Persistent SQL Server Session State Management") de Microsoft Knowledge Base, en la dirección http://support.microsoft.com. Como alternativa, los servidores Web que ejecutan ASP.NET 1.0 o ASP.NET 1.1 pueden remitir el estado de sesión persistente a un servidor SQL Server que tenga instalado el esquema de estado de sesión de ASP.NET 2.0.

En el modo SQLServer, puede configurar varios equipos que ejecuten SQL Server para que funcionen como un clúster de conmutación por error, es decir, dos o más equipos idénticos que ejecuten SQL Server y que almacenan datos para una sola base de datos. Si se produce un error en un equipo que ejecuta SQL Server, otro servidor del clúster asume el control y atiende las solicitudes sin que se pierdan los datos de la sesión. Para configurar el modo SQL Server para un clúster de conmutación por error, debe especificar -sstype p cuando ejecute la herramienta Aspnet_regsql.exe de modo que los datos del estado de sesión se almacenan en la base de datos ASPState en vez de en la base de datos tempdb. Los clústeres de servidores SQL Server no permiten almacenar el estado de sesión en la base de datos tempdb. Para obtener más información sobre la configuración del modo SQL Server para un clúster de conmutación, vea el artículo 323262, "Cómo utilizar estado de sesión ASP.NET, Modo de SQL Server, de un clúster de conmutación por error" en el sitio http://support.microsoft.com de Microsoft Knowledge Base.

El modo Custom especifica que desea almacenar datos del estado de sesión mediante un proveedor del almacén de estados de sesión personalizado. Cuando configura la aplicación de ASP.NET con una propiedad Mode de Custom, debe especificar el tipo de proveedor de almacenes de estados de sesión mediante el subelemento providers del elemento de configuración sessionState. El tipo de proveedor se especifica utilizando un subelemento add e incluyendo tanto un atributo type que especifique el nombre del tipo de proveedor como un atributo name que especifique el nombre de la instancia del proveedor. El nombre de la instancia del proveedor se proporciona al atributo customProvider del elemento de sessionState para configurar el estado de sesión de ASP.NET de modo que utilice esa instancia de proveedor para almacenar y recuperar los datos de la sesión.

En el ejemplo siguiente se muestran elementos de un archivo Web.config donde se especifica que el estado de sesión de ASP.NET utiliza un proveedor de almacenes de estados de sesión 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 obtener más información sobre proveedores de almacenes de estados de sesión personalizados, vea Implementar un proveedor de almacén de estados de sesión.

ms178586.alert_note(es-es,VS.100).gifNota:

Un proveedor de almacenes de estados de sesión personalizados obtendrá acceso a cualquier recurso protegido, como por ejemplo SQL Server, mediante la identificación del proceso ASP.NET o las credenciales de usuario proporcionadas al elemento de configuración identity, si existieran. Puede especificar que, en su lugar, se utilice la identidad suplantada por IIS definiendo <identity impersonate="true" /> y estableciendo el atributo useHostingIdentity del elemento de configuración sessionState en false. Para obtener más información sobre la identidad de procesos en ASP.NET, vea Configurar la identidad de procesos en ASP.NET y Suplantación de ASP.NET.

Mostrar: