Domanda

Abbiamo un'applicazione legacy (miscela di classico ASP e ASP.net) che ha un paio di contenuti Ajax ricco pages.The aspettativa è che gli utenti del sito esegue una serie di attività sulla pagina che può estendersi su una discreta quantità di tempo dire 15-30 minuti.

Uno dei requisiti è che gli utenti che accedono al sito siano automaticamente disconnessi dopo 15 minuti di inattività. Questo è attualmente in fase ottenuto utilizzando i meta tag per reindirizzare l'utente alla pagina di logout dopo 15 minuti di inattività nella pagina.

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

Il problema che stiamo avendo è che il browser pretende che ci sia stato qualsiasi attività sulla pagina pur avendo molte interazioni AJAX con il server. Così, dopo i 15 minuti di ciò che il browser pensa come l'inattività, l'utente viene disconnesso automaticamente anche se sono nel bel mezzo di fare qualcosa.

messaggio message board siamo cercato di risolvere il fastidio utilizzando javascript (jQuery) in questo modo

Il sotto sarebbe un gestore di eventi come ad esempio, facendo clic del salvataggio sulla pagina ecc per semplicità qui è la caricamento della pagina per modificare il tempo di aggiornamento per 5 secondi

$(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"); 
});

L'intento di essere (ri) impostando il contenuto meta tag della pagina Timer di aggiornamento sarebbe azzerato. Purtroppo questo doesnt sembra funzionare (in IE).

Poiché si tratta di un'applicazione legacy, alcune delle decisioni ovvero per utilizzare i meta tag, ecc sono cotti in. La domanda è: esiste un modo per ottenere meta refresh tag per coesistere pacificamente con un'applicazione Ajax? Sto facendo qualcosa di sbagliato e c'è un modo per risolvere questo problema?

È stato utile?

Soluzione

supponendo che si sta utilizzando jQuery qualcosa di simile potrebbe funzionare. Non ho ancora testato e non so se i browser leggeranno l'un meta tag all'interno di un elemento noscript nell'intestazione del documento.

Sostituire il meta tag con questo:

<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>

Ci sono sicuramente modi migliori di fare questo. Come servire 2 pagine ... uno per gli utenti con javascript e uno senza.

O semplicemente disabilitare l'applicazione per le persone senza javascript. : O)

Modifica secondo questa pagina: http://www.google .com / support / forum / p / Webmaster / thread? tid = 25c023fea4ea60a4 & hl = it la meta refresh dovrebbe funzionare all'interno dell'elemento noscript.

Altri suggerimenti

Non credo ci sia un modo per fermare la meta refresh. È possibile modificare il meta tag, ma il browser ha già deciso che sta andando per aggiornare in 15 minuti; non c'è API per impedirlo.

Se non si può fermare l'aggiornamento o utilizzare JavaScript per fare il redirect, forse è possibile contenere i danni:

$(window).unload(function() { 
  // Insert code here 
  // to save the user's work.
  alert('Sorry, you have to log out now.')
}); 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top