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.

  • 🌐 HTTP sin estado: HTTP no conserva los datos entre solicitudes, por lo que ASP.NET añade mecanismos para preservar el estado.
  • 🗂️ Estado de vista: ViewState transfiere automáticamente los valores de control de una página a la siguiente.
  • 🔑 Objeto de sesión: Session[“Key”] almacena y recupera pares clave-valor a lo largo del ciclo de vida de la aplicación.
  • ⚙️ Modos de estado: El estado de la sesión se puede almacenar en InProc, en un StateServer, en SQL Server o en un almacén personalizado.
  • 🇧🇷 Se acabó el tiempo: El parámetro sessionState timeout en web.config controla cuánto tiempo permanece activa una sesión.

Tutorial de administración de sesiones de ASP.NET con ejemplo

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.

Utilice el objeto de sesión

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

  1. 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.
  2. 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.
  3. 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:

Utilice el objeto de sesión

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.

Preguntas Frecuentes

Sí. Los asistentes de IA pueden generar el código para almacenar y leer los valores de la sesión, sugerir el modo de estado correcto y escribir la configuración del archivo web.config. RevRevise el código generado para confirmar que se ajusta a sus necesidades de escalabilidad y seguridad.

Sí. Las herramientas de revisión de código basadas en IA pueden detectar riesgos como la fijación de sesión, la falta de cookies HTTPS o el almacenamiento de datos confidenciales en la sesión. Considere los resultados como una guía y confirme las correcciones con pruebas de seguridad antes de la implementación.

El estado de sesión almacena datos para la sesión de un único usuario, mientras que el estado de aplicación almacena datos compartidos por todos los usuarios de la aplicación. Utilice el estado de sesión para valores por usuario y el estado de aplicación para datos globales como contadores o configuración.

No. Cada usuario tiene una sesión independiente, identificada por un ID de sesión único almacenado en una cookie. Un usuario no puede leer los valores de sesión de otro, por lo que la sesión se utiliza para los datos de cada usuario.

Resumir este post con: