Gestión de sesiones en ASP.NET [Ejemplo]
⚡ Resumen inteligente
La administración de sesiones de ASP.NET permite que una aplicación HTTP sin estado recuerde los datos del usuario entre solicitudes. Explica ViewState, el objeto Session para almacenar pares clave-valor, incluye un ejemplo práctico, los modos de estado de sesión, la configuración del tiempo de espera y las ventajas del estado de sesión.
Gestión de sesiones ASP.NET
El protocolo HTTP en el que funcionan todas las aplicaciones web es un protocolo sin estado. Sin estado, simplemente significa que la información no se conserva de una solicitud a otra.
Por ejemplo, si tiene una página de inicio de sesión con dos cuadros de texto, uno para el nombre y el otro para la contraseña, cuando hace clic en el botón Iniciar sesión en esa página, la aplicación debe asegurarse de que el nombre de usuario y la contraseña se transfieran a la página siguiente.
En ASP.Net, esto se logra de diversas maneras. La primera es mediante un concepto llamado ViewState. Aquí es donde ASP.Net almacena automáticamente el contenido de todos los controles y se asegura de que se transmita a la siguiente página. Esto se realiza a través de una propiedad llamada ViewState.
No es ideal que un desarrollador cambie nada en el estado de vista. Esto se debe a que ASP.Net debería manejarlo únicamente.
Objeto de sesión ASP.NET
La otra forma es utilizar un objeto llamado "Objeto de sesión". El objeto Session está disponible durante todo el ciclo de vida de la aplicación. Puede almacenar cualquier número de pares clave-valor en el objeto Sesión. Entonces, en cualquier página, puede almacenar un valor en el objeto Sesión mediante la siguiente línea de código.
Session["Key"] = value
Esto almacena el valor en un objeto Session, y la parte 'key' se usa para darle un nombre. Esto permite recuperar el valor posteriormente. Para recuperar un valor, simplemente ejecute la siguiente instrucción.
Session["Key"]
Ejemplo de objeto de sesión ASP.NET
En nuestro ejemplo, utilizaremos el objeto Session para almacenar el nombre introducido en el campo de texto correspondiente de la página. A continuación, recuperaremos ese valor y lo mostraremos en la página. Añadamos el siguiente código al archivo Demo.aspx.cs.
protected void btnSubmit_Click(object sender, EventArgs e) { Session["Name"] = txtName.Text; Response.Write(Session["Name"]); lblName.Visible = false; txtName.Visible = false; lstLocation.Visible = false; chkC.Visible = false; chkASP.Visible = false; rdMale.Visible = false; rdFemale.Visible = false; btnSubmit.Visible = false; }
Code Explicación:-
- La primera línea de código toma el valor del control de cuadro de texto Nombre y lo almacena en el objeto Session. Al especificar el código Session["Name"], le damos a la propiedad el nombre "Name". Al especificar un nombre para la propiedad, resulta más fácil recuperarla posteriormente.
- La siguiente línea de código recupera el valor almacenado del objeto Sesión. Luego escribe este valor a través del método 'Response.Write' en el cliente.
- Por último, ocultamos todos los controles del formulario. Si no lo hacemos, todos los controles, junto con los valores de respuesta, se mostrarán simultáneamente.
Una vez que realice los cambios anteriores, verá el siguiente resultado.
Salida:
Desde la salida, puede ver que el valor de sesión del nombre se recuperó y se mostró en el navegador.
Modos de estado de sesión de ASP.NET
ASP.NET puede almacenar datos de sesión en varios lugares, denominados modos de estado de sesión. El modo que elija afecta al rendimiento, la escalabilidad y la conservación de los datos tras el reinicio de la aplicación. La siguiente tabla los compara:
| Moda | Dónde se almacena el estado | Mejores para |
|---|---|---|
| En proceso | En la memoria del servidor web (predeterminado) | Aplicaciones de un solo servidor; las más rápidas, pero se pierden al reiniciar. |
| Servidor de estado | Un proceso de servicio de estado de ASP.NET independiente | Granjas web; sobrevive a los reinicios de la aplicación. |
| Servidor SQL | Una base de datos SQL Server | Granjas web que necesitan un estado duradero y escalable |
| Personalizado | Un proveedor personalizado que usted implementa | Tiendas especializadas como Redis |
| DESC | Estado de la sesión deshabilitado | Aplicaciones que no necesitan sesiones |
InProc es la opción predeterminada y la más rápida, pero para implementaciones con equilibrio de carga, StateServer o SQLServer mantienen las sesiones disponibles en varios servidores.
Cómo configurar el tiempo de espera de sesión en ASP.NET
Una sesión no dura para siempre; caduca tras un período de inactividad. Puedes configurar este tiempo de espera en el archivo web.config mediante el elemento sessionState, donde el valor del tiempo de espera se expresa en minutos:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
También puedes configurarlo en el código con Session.Timeout = 30;El tiempo de espera predeterminado es de 20 minutos. Elegir un tiempo de espera más corto libera la memoria del servidor más rápidamente y mejora la seguridad, mientras que un tiempo de espera más largo mantiene a los usuarios conectados durante más tiempo.
Ventajas y desventajas del estado de sesión
El estado de sesión es práctico, pero tiene desventajas que debes sopesar antes de depender en gran medida de él.
Ventajas:
- Fácil de usar para almacenar datos por usuario, como por ejemplo una tienda.ping carrito o datos de inicio de sesión.
- Puede almacenar objetos complejos, no solo cadenas de texto.
- Los datos se almacenan en el servidor, por lo que son más seguros que el almacenamiento en el lado del cliente.
Desventajas:
- El modo InProc consume memoria del servidor y no es escalable en una granja de servidores web.
- Los datos de la sesión se pierden cuando la sesión caduca o la aplicación se reinicia (en modo InProc).
- Almacenar grandes cantidades de datos por usuario puede perjudicar el rendimiento bajo cargas pesadas.



