JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Como evitar que las sesiones caduquen por inactividad: The Film

Uno de los posts más visitados de mi blog es en el que comento cómo evitar que las sesiones caduquen por inactividad. Es la tercera parte de una serie de posts sobre caducidad de sesiones en ASP.NET.

Ha habido también muchos comentarios y parece que a mucha gente le cuesta bastante implementar la solución, por lo que tras varias peticiones (tanto en mi blog original, JASoft.org, como en Geeks.ms) me he decidido a generar un vídeo práctico mostrando como se hace. 

Es del estilo de los que tenemos en los cursos de campusMVP pero con mucha peor calidad, que viene impuesta por las limitaciones de SOAPBox. Lo cierto es que estos sitios de vídeo en Internet no son los más adecuados para este tipo de grabaciones por su elevada compresión, que limita la calidad, pero bueno... se deja ver. A ver si lo puedo colgar en Channel9 de Microsoft en breve y así que podáis verlo con major calidad:

Además te puedes descargar el código fuente desarrollado en el vídeo para poder experimentar por tu cuenta.

Espero que esto disipe por fin las dudas y le sea de más utilidad a todo el mundo.

¡Saludos!

Actualización día 2/6/2009: Microsoft ha publicado el vídeo en alta calidad en Channel9, por lo que mejor visita este enlace para verlo bien y poder descargarlo en diversos formatos.

José Manuel Alarcón José Manuel Alarcón
Fundador de campusMVP.es, el proyecto de referencia en formación on-line para programadores en lengua española. Autor de varios libros y cientos de artículos. Galardonado como MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.
Descarga GRATIS mi último libro (no técnico): "Tres Monos, Diez Minutos".
Banner

Comentarios (17) -

Muy interesante José Manuel, y sobre todo claro y sencillo. Enhorabuena

Responder

Alfonso Martín

Muchas gracias por el código.

Responder

Tony Alfaro

Muy buen articulo... aunque de momento no me funcione, soy principiante en esto y trato de aplicarlo a una cabecera en mi Master Page y al parecer me marca error en el javascript por la etiquetas <% %> que estan incrustadas, ya buscare otra forma de aplicarlo... Bueno en fin...

Me gustaria saber más sobre las sesiones, sus estados, etc... xD

Responder

muy buen articulo, ya mas claro de implementar, disculpa con respecto a sesiones o a autenticacion tengo un dilema no se si puedas orientarme, tengo varios sistemas montados sobre un solo servidor y un site de iis 7 en win server 2008, pero el problema es q si abro dos sistemas web de esos en una pc, qal entrar a la segunda me saca de la otra y sucesivamente, gracias por el tiempo
y excelente video, y apude implementarlo asi :)

Responder

Necesito alguna forma de mantener la sesion sin usar las etiquetas "<%" "%>", ya que visual studio sólo deja usar los controles basicos si se usan estas etiquetas en la página aspx

Responder

Comorrl?

Es la primera vez que oigo que si introduces una etiqueta <% %> no puedes usar ciertos tipos de controles. Eso no es así ¿de dónde lo sacas?

En cualquier caso no hay problema: simplemente usa una constante JavaScript para lanzar las peticiones periódicas y listo, pero vamos...

Responder

Argentina Laura Arevalo

muchas gracias por el ejemplo , muy facil de hacerlo hasta en c sharp, probare en que me puede ayudar y despues le cuento, saludos

Responder

Muy bueno tu articulo y bastante comprensible la explicación, pero de ver el video me queda un detalle, allí por el minuto 21:25 donde abres con F12 de debugger se ve en el header dos llamadas al handler "Mantenedor_sesiones.ashx" debido a que se inyectó 2 veces ese codigo, pero se me ocurre que en caso de tener abierto todo el dia el navegador el header se llenaria de esas lineas de llamadas al handler, no existe forma de ir borrando esas llamadas en la media que no las usemos?
Gracias!

Responder

Spain José Manuel Alarcón

En realidad esta es solamente una de las muchas formas de hacerlo. De lo que se trata es de llamar al servidor periódicamente de manera que la página o manejador que usemos mantenga la sesión abierta. He utilizado lo de los scripts por sencillez, pero podrías hacerr lo mismo con llamadas mediante AJAX y funcionaría igual (recuerda que el mantenimiento de la sesi´no se hace en el servidor y no en el cliente) por lo que ya no te pasaría eso.
Además, si realmente necesitas una aplicación que se mantenga abierta todo el día quizá deberías plantearte dos cosas:

1.- Si realmente debes usar variables de sesión en ese caso, y buscar otras opciones.
2.- Si no te queda más remedio que usarlas, pon el tiempo de sesión al máximo permitido y llama muy de cuando en cuando al servidor, así tendrás menos carga tanto en cliente como en servidor.

Saludos,

Responder

Mexico Walter Mtz

que tal... como estan !!
oie con el codigo lo probe y funciona muy bien... pero cuando lo pongo dentro de una masterpage dentro del head no me funciona :( sabes porque???
saludos.

Responder

Spain José Manuel Alarcón

Este código funciona exactamente igual en una MasterPage así que el error lo tienes que tener en otro lado. La parte de lado cliente es un simple JavaScript por lo que si ves el código fuente de tus páginas y dicho JavaScript está ahí verifica que la ruta a la que llamas en el servidor es correcta, porque te tiene que funcionar.

Responder

Mexico Walter Mtz

Gracias, ya revise bien y esta correcto... yo tenia mal la direccion a donde apuntaba el .ashx
ya lo probe y funciona correctamente.. gracias !!!

solo un detalle que me sale, cuando estoy corriendo la aplicacion, despues de un rato sale una ventana, un depurador Just-In-Time de Visual Studio   :S porque sale?

en mi servidor sale:
--------------------------------------------------------------
Exception no controlada ("Launch for user") en w3wp.exe[2624]

--------------------------------------------------------------
Y en mi laptop cuando lo puebo local sale:
An unhandled Microsoft.NET framework exception ocurred in w3wp.exe[4424]

The Just-In-Time debugger was launched without necessary security permissons.
To debug this process, the Just-In-Time debugger must be run as an Administrator.


Porque saldra esto???

Responder

estimado JoseManuel, tengo una consulta muy puntual: deseo verificar si los valores de las vaiables de sesion ya caducaron, en tal caso, cerrar sin confirmacion la ventana actual. ¿Podrias ayudarme a solucionar esto?
Desde ya, te agradezco por estos tutoriales, son de lo mejor que he visto.

Responder

Spain José M. Alarcón

Si buscas en este blog encontrarás la solución:

· Cómo detectar si la sesión ha caducado en ASP.NET (Método I):
www.jasoft.org/.../...-6db4-4f37-a7d7-8bd7b7c.aspx

· Cómo detectar si la sesión ha caducado en ASP.NET (Método II)
www.jasoft.org/.../...-0899-4325-81fb-0dc67c3.aspx

Este segundo mucho más profesional.

Saludos,

Responder

Chile José Luis

Estimado:

   Es posible que me muestre el controlador genérico en versión c#, lo traduje, pero no estoy seguro de que haya quedado bien.

Responder

Muy bueno y practico, gracias por la enseñanza!!

Saludos desde Mexico!

Responder

disculpa, el codigo que usas <% %> es para asp,, tienes como hacerlo dentro de mvc?

Responder

Agregar comentario