Frage

Wir haben eine Legacy-Anwendung (Mischung aus klassischen ASP und ASP.net), die ein paar Ajax Inhalte reichen pages.The Erwartung hat, dass die Benutzer der Website eine Reihe von Aufgaben auf der Seite führt, die einen fairen Betrag umfassen kann sagen, die Zeit von 15 bis 30 Minuten.

Eine der Voraussetzungen ist, dass Benutzer die Anmeldung auf der Website automatisch eingeloggt out nach 15 Minuten Inaktivität. Dies wird derzeit durch die Verwendung der Meta-Tags zum Umleiten des Benutzers auf die Logout-Seite nach 15 Minuten Inaktivität in der Seite erreicht wird.

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

Das Problem ist, wir haben, dass der Browser es tut denkt auf der Seite jede Aktivität wurde mit dem Server viele AJAX-Interaktionen trotz. So nach den 15 Minuten, was als Untätigkeit der Browser denkt, wird der Benutzer automatisch abgemeldet, auch wenn sie in der Mitte, etwas zu tun.

Nachricht im Forum erstellt rel="nofollow wir versuchte, den Ärger zu beheben, indem Sie mit Hilfe von Javascript (jQuery) wie so

Die unten würde ein Event-Handler sein wie Klicken der Einfachheit halber auf der Seite usw. speichern hier ist die Seite zu laden, die Aktualisierungszeit auf 5 Sekunden

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

Die Absicht (Wieder-) den Meta-Tag Inhalt der Seite Auffrischzeitgeberereignis Einstellung wäre zurückgesetzt. Leider scheint diese nicht (in IE) zu arbeiten.

Da dies eine Legacy-Anwendung ist, einige der Entscheidungen d usw. Meta-Tags zu verwenden gebacken. Die Frage ist, gibt es eine Möglichkeit, Meta-Tag-Refresh zu bekommen, um friedlich koexistieren mit einer Ajax-Anwendung? Mache ich etwas falsch und ist es eine Möglichkeit, dieses Problem zu lösen?

War es hilfreich?

Lösung

vorausgesetzt, Sie sind mit jQuery so etwas wie dies funktionieren könnte. Ich habe es nicht getestet und weiß nicht, ob Browser die einen Meta-Tag in einem noscript Elemente im Dokument Kopf gelesen werden.

Ersetzen Sie Ihre Meta-Tag mit diesem:

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

Es gibt definitiv bessere Möglichkeiten, dies zu tun. Wie dienen zwei Seiten ... eine für Nutzer mit Javascript und eine ohne.

oder deaktivieren Sie einfach die App für Menschen ohne Javascript. : O)

Bearbeiten nach dieser Seite: http://www.google .com / support / forum / p / Webmaster / Thread? tid = 25c023fea4ea60a4 & hl = en das Meta-Refresh sollte innerhalb des noscript Elements arbeiten.

Andere Tipps

Ich glaube nicht, es gibt einen Weg, um das Meta-Refresh zu stoppen. Sie können den Meta-Tag ändern, aber der Browser entschieden hat es bereits in 15 Minuten aktualisieren geht; es gibt keine API, das zu stoppen.

Wenn Sie nicht die Aktualisierungs stoppen oder JavaScript verwenden, um die Umleitung zu tun, vielleicht können Sie den Schaden enthalten:

$(window).unload(function() { 
  // Insert code here 
  // to save the user's work.
  alert('Sorry, you have to log out now.')
}); 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top