Este es un artículo basado en el artículo "Problema de expiración de la sesión en ASP.Net" de un blog (el autor es Manuel Cárdenas de Nidea Soluciones) que ya no se actualiza así que lo pongo en mi blog para evitar que si lo necesito en el futuro, y lo busque en ese blog, no lo vaya a encontrar.
El problema a solucionar es como mantener viva la sesión en ASP.Net. La implementación es sencilla, pero claramente se puede mejorar, cosa que hicimos en una aplicación, y aún se sigue usando.
En el artículo original se mencionaban 3 formas de evitar que la sesión "muera", pero las dos primeras involucraban configuraciones o acceso al servidor web. La tercera, la cual vamos a describir, está en nuestras manos, ya que consiste en modificaciones a la aplicación en sí y no a la configuración del servidor o del pool de la aplicación.
Solución: Servicio web de Echo
Normalmente, un portal web dispone de dos partes, la pública (en la que normalmente se puede funcionar con cookies) y la privada en la que trabajaremos con sesiones. Es en la parte privada donde utilizaremos esta opción.
La idea es implementar un servicio web que simplemente realice un eco, reciba un parámetro y lo devuelva. Habilitamos la sesión para el servicio web con lo que cada vez que se llame a este servicio, la cuenta de expiración de la sesión se reinicirá. Desde las página de gestión se llama, vía AJAX, periódicamente (yo lo tengo cada 50 segundos) a dicho servicio web para que no reinicie la cuenta. De forma esquemática, la solución es la siguiente:
El código para el servicio web es el siguiente:
Tenemos que introducir el using System.Web.Script.Services para poder utilizar este servicio web vía AJAX. Además, la definición del servicio web incluye la sentencia [WebMethod(true)] indicando que se utilizará la sesión en ese método del servicio web.
Para llamar a dicho método desde la página maestra (lo normal) o desde cualquier página de nuestra aplicación utilizaremos el siguiente código:
a. Incluir una referencia web al servicio web creado.
b. Dar de alta el servicio web mediante el ScriptManager de la página
En la propiedad Path pondremos la ubicación del fichero .asmx (servicio web). Si, al crear el servicio web, separados el código del fichero, se creará un fichero .asmx con la definición del servicio web donde le hayamos dicho y un fichero .cs con los códigos dentro de la carpeta App_Code.
c. Crear la función Javascript que llama al servicio web
Ponemos la función en el onload de la página para que se ejecute al iniciar la página. En este caso esta puesto que se repita la llamada cada 50 segundos (50.000 milisegundos)
0 Comentarios