Las variables de sesión en ASP.NET se guardan por defecto en el modo "InProc".

Si deseamos hacer persistente esta información debemos utilizar otros modos como "StateServer" o "SQLServer".

Si optamos por ésta última opción, Microsoft nos ofrece herramientas para automatizar esos procesos.

1. Base de Datos

En la ruta C:\Windows\Microsoft.NET\Framework\ del servidor donde vayamos a incluir la base de datos,

en el directorio de la versión de Framework que utilicemos (por ejemplo v4.0.30319) encontraremos el ejecutable aspnet_regsql.exe

que tendremos que ejecutar con permisos de administrador de SQL Server, los parámetros más comunes son:

  • -S <servidor>
    • Instancia de SQL Server (7.0 o superior) con la que trabajar.
  • -E
    • Autenticación con la credenciales de Windows.
  • -U <usuario>
    • Nombre de usuario de SQL Server para la autenticación.
  • -P <contraseña>
    • Contraseña de SQL Server para la autenticación.
  • -ssadd
    • Agrega la compatibilidad para el estado de sesión en el modo "SQLServer".
  • -ssremove
    • Elimina la compatibilidad para el estado de sesión en el modo "SQLServer".
  • -sstype t|p|c  
    • Tipo de compatibilidad
      • t Base de datos "tempdb" los datos no se guardan si se reinicia SQL.
      • p Base de datos predeterminada "ASPState"
      • c Base de datos personalizada
  • -d <base de datos>
    • Base de datos personalizada de la opción -sstype c

Como ejemplo ejecutaríamos desde la ruta C:\Windows\Microsoft.NET\Framework\v4.0.30319

el comando aspnet_regsql.exe -S SE41SDB31\SQLSERVER2008P -U TURNOSASPRE -P _TURNOSASPRE_ -ssadd -sstype c -d TurnoSASPRE

Una vez ejecutado nos creará las tablas [ASPStateTempSessions] y [ASPStateTempApplications] en la base de datos elegida (por defecto o personalizada)

donde se guardarán automáticamente las variables de sesión y aplicación respectivamente.

2. Código Fuente

En el código, para implementar esta funcionalidad hay que hacer dos actuaciones:

  1. Hacer [Serializable] todos las clases que incluyamos en las variables de sesión.
  2. Incluir en el archivo Web.Config la sección "SesionState"
    1. <sessionState mode="SQLServer" allowCustomSqlDatabase="true"
              sqlConnectionString="Data Source=nombreServidor; Initial Catalog=nombreBaseDatos; User ID=nombreUsuario; password=contraseñaUsuario"
              cookieless="false" timeout="minutosTimeOut" />

En el caso de que la base de datos seleccionada no estuviera disponible bastaría con sustituir la sección anterior por <sessionState timeout="minutosTimeOut"/>

lo que indicaría el modo por defecto "InProc".




  • Sin etiquetas