He estado trabajando para detectar un tiempo de espera en un proyecto asp.net. Tenga una función ajax que verifique cada 5 segundos para ver si la sesión ha expirado. Sin la verificación de la función ajax, en realidad caduca después de un minuto, pero si mantengo la función activada, me sigue enviando un estado "activo". Así que me pregunto, ¿mi función/solicitud de ajax mantiene viva la sesión?
Función Ajax:
function isSessionAlive(){ await jQuery.ajax({ type: "POST", url: 'coolpage.aspx/hello', contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { console.info("status: ", response); }, failure: function (response) { console.info("status: ", response); }, cache:false });}método de página asp.net
//[WebMethod(EnableSession = true)] [WebMethod] public static string hello() { //return (HttpContext.Current.Session["dummy"] == null) ? "expired" : "active"; if (HttpContext.Current.Session != null) { if (HttpContext.Current.Session.IsNewSession) { string cookieHeader = HttpContext.Current.Request.Headers["Cookie"]; if ((null != cookieHeader) && (cookieHeader.IndexOf("ASP.NET_SessionId") >= 0)) { return "expired"; } } } return "active"; // return HttpContext.Current.User.Identity.IsAuthenticated ? "active":"expired"; }Tienes que usar la función setInterval en ajax.
setInterval(function(){ $.get('coolpage.aspx/hello'); }, 300000); // 5minsSi su sesión ha expirado, entonces destruya su sesión y regrese "caducada". Después de llamar a ajax (document.ready), debe verificar el valor de su sesión usando if y else.