no se puede redirigir al usuario cuando la sesión caduca porque no hay petición del navegador para redirigir:
- Si el usuario visita su sitio dentro del tiempo de espera de la sesión (20 minutos por defecto), la sesión no ha finalizado, por lo tanto, no es necesario que los redireccione.
- Si el usuario visita su sitio una vez que la sesión ha expirado, la sesión ya ha finalizado. Esto significa que estarán en el contexto de una nueva sesión: Session_OnEnd ya habrá disparado para la sesión anterior y en su lugar obtendrá Session_OnStart para la nueva sesión.
Aparte de un elemento de cliente (por ejemplo JavaScript temporizador, etc.), por lo que necesita para controlar la redirección en un lugar Session_OnStart - pero es evidente que es necesario distinguir esto de alguien que viene al sitio nuevo. Una opción es establecer una cookie de sesión cuando comienza su sesión (es decir, una cookie sin vencimiento para que solo dure hasta que se cierre el navegador), luego busque esa cookie en Session_OnStart; si está presente, se trata de un usuario recurrente con un vencimiento sesión, si no es un nuevo usuario.
Obviamente, todavía puede usar Session_OnEnd para poner en orden desde el lado del servidor; es solo la interacción del cliente que no está disponible para usted.
He aceptado esta respuesta porque la clave para identificar una sesión expirada es verificar si existe la cookie de sesión cuando se trata de una nueva sesión. –
Lamentablemente, no hay una buena manera de obtener el nombre de la cookie de sesión porque no se puede hacer "Session.CookieName" como se puede con FormsAuthneticationTicket. La mejor recomendación que he encontrado es solo tener una clave/valor de AppSetting que contenga el nombre de la Cookie de sesión. Así que lo configurará dos veces, lo que a nadie le gusta hacer, pero parece ser la forma más conveniente de hacerlo. Solo mis dos centavos. – dyslexicanaboko