2010-02-05 8 views
13

Tenemos una aplicación heredada (mezcla de ASP clásico y ASP.net) que tiene algunas páginas ricas en contenido Ajax. La expectativa es que los usuarios del sitio realiza un conjunto de tareas en la página que pueden abarcar una buena cantidad de tiempo, digamos, 15-30 minutos.Uso de javascript para restablecer la metaetiqueta para evitar que actualice la página

Uno de los requisitos es que los usuarios que inicien sesión en el sitio se desconecten automáticamente después de 15 minutos de inactividad. Esto se está logrando actualmente mediante el uso de etiquetas meta para redirigir al usuario a la página de cierre de sesión después de 15 minutos de inactividad en la página.

<meta name='Refresh' http-equiv="Refresh" content="900;URL=/someurl/logout.asp">

El problema que estamos teniendo es que el navegador no piensa no ha habido ninguna actividad en la página a pesar de tener muchas interacciones AJAX con el servidor. Entonces, después de los 15 minutos de lo que el navegador considera inactividad, el usuario se desconecta automáticamente incluso si está haciendo algo.

Inspirados por este message board post que intentaron arreglar la molestia mediante el uso de Javascript (jQuery) de esta manera

La continuación sería un controlador de eventos tales como hacer clic de la ahorrar en la página, etc., para simplicidad aquí es la página carga para modificar el tiempo de actualización de 5 segundos

$(document).ready(function() { 
    var selector = 'meta[name=Refresh]'; 
    var content = $(selector).attr("content"); //"900;URL=/someurl/logout.asp" 
    $(selector).attr("content", "5;URL=/someurl/logout.asp"); 
}); 

siendo la intención de (re) establecer el contenido de la etiqueta meta la página temporizador de renovación sería puesta a cero. Lamentablemente, esto no parece funcionar (en IE).

Dado que se trata de una aplicación heredada, algunas de las decisiones, es decir, utilizar metaetiquetas, etc., están preparadas. La pregunta es: ¿hay alguna forma de conseguir que la actualización de metaetiquetas coexista pacíficamente con una aplicación Ajax? ¿Estoy haciendo algo mal y hay alguna manera de resolver este problema?

+1

el meta Refresh no tiene nada que ver con la actividad: si lo configura en 15 minutos, se actualizará a los 15 minutos independientemente de la actividad. – Matt

+0

ver posible duplicado: http: // stackoverflow.com/questions/262305/how-can-i-update-meta-refresh-from-javascript-when-using-asyncronous-calls – Matt

+0

@Matt, por actividad quise decir que la página no se ha vuelto a cargar. Supuse que está implícito cuando hablamos de una aplicación asp clásica en la que las páginas se vuelven a cargar en cada publicación. –

Respuesta

7

suponiendo que está utilizando jQuery algo como esto podría funcionar. No lo he probado y no sé si los navegadores leerán una metaetiqueta dentro de un elemento noscript en el encabezado del documento.

reemplazar su etiqueta meta con esto:

<script type="text/javascript"> 
    window.onload = function(){ 
     var timer = null, 
      time=1000*60*15, // 15 minutes 
      checker = function(){ 
       if(timer){clearTimeout(timer);} // cancels the countdown. 
       timer=setTimeout(function() { 
        document.location="/someurl/logout.asp"; 
       },time); // reinitiates the countdown. 
      }; 
     checker(); // initiates the countdown. 
     // requires jQuery... (you could roll your own jQueryless version pretty easily though) 
     if(window.jQuery){ 
      // bind the checker function to user events. 
      jQuery(document).bind("mousemove keypress click", checker); 
     } 
    }; 
</script> 
<noscript> 
    <meta name="Refresh" http-equiv="Refresh" content="900;URL=/someurl/logout.asp"> 
</noscript> 

Sin duda hay mejores maneras de hacer esto. Como servir 2 páginas ... una para usuarios con javascript y otra sin.

O simplemente desactive la aplicación para personas sin javascript. : O)

Editar de acuerdo a esta página: http://www.google.com/support/forum/p/Webmasters/thread?tid=25c023fea4ea60a4&hl=en la meta de actualización debe trabajar dentro del elemento noscript.

+0

Gran código, pero te falta un "{" en la función() ver abajo –

0

No creo que haya una forma de detener la actualización de metadatos. Puede cambiar la metaetiqueta, pero el navegador ya ha decidido que se actualizará en 15 minutos; no hay API para detener eso.

Si no puede detener el refresco o usar JavaScript para hacer la redirección, tal vez usted puede contener el daño:

$(window).unload(function() { 
    // Insert code here 
    // to save the user's work. 
    alert('Sorry, you have to log out now.') 
}); 
Cuestiones relacionadas