Notificación de expiración de sesión minutos antes.

CArlos Reza
15 de Junio del 2012
Hola,

Antes que nada agradezco el tiempo de leer el tema.

La consulta que quiero hacer es acerca de como mostrar una notificación un minuto antes de que expire una sesión en asp.net, ya sea en una ventana modal o con un botón intermitente, de modo que el usuario pueda presionar un botón y la sesión ya no caduque.

Agradecería mucho la orientación.

Saludos.

--
Carlos Reza

David Carrero
12 de Agosto del 2026

Hola,

Esto se resuelve del lado del cliente con JavaScript, con un temporizador que coincida con el tiempo de expiración de tu sesión en ASP.NET (el valor de sessionState timeout en tu web.config). La idea: arrancas un contador al cargar la página, y un poco antes de que expire, muestras el aviso:

<script>
const MINUTOS_SESION = 20; // debe coincidir con tu sessionState timeout
const AVISAR_ANTES_DE = 1; // minuto antes de expirar

const msHastaAviso = (MINUTOS_SESION - AVISAR_ANTES_DE) * 60 * 1000;

setTimeout(function () {
    mostrarAvisoExpiracion();
}, msHastaAviso);

function mostrarAvisoExpiracion() {
    const continuar = confirm("Tu sesion va a expirar en 1 minuto. Pulsa Aceptar para seguir conectado.");
    if (continuar) {
        renovarSesion();
    }
}

function renovarSesion() {
    fetch('/RenovarSesion.aspx');
}
</script>

El truco está en renovarSesion(): cualquier petición normal al servidor ASP.NET renueva automáticamente el contador de expiración de la sesión (ASP.NET no distingue «petición real del usuario» de «ping para mantener viva la sesión», ambas cuentan igual). Por eso basta con una página vacía RenovarSesion.aspx a la que solo llamas por fetch cuando el usuario confirma que sigue ahí, sin necesidad de recargar toda la página actual.

Si en vez de un confirm() nativo (que es funcional pero feo) quieres una ventana modal más cuidada, cambia mostrarAvisoExpiracion() para abrir tu propio modal (Bootstrap, o el que uses) en vez de confirm(), la lógica de temporizador y de renovar la sesión con fetch es exactamente la misma.

Un matiz importante: este temporizador de JavaScript se reinicia si el usuario recarga la página, pero no si simplemente deja de interactuar sin recargar. Si quieres ser más precisos y reiniciar el aviso cada vez que el usuario hace algo (mueve el ratón, escribe), tendrías que reiniciar el setTimeout en esos eventos, pero para la mayoría de casos con el enfoque simple es suficiente.

David Carrero