2009-05-17 3 views
4

Ich habe ein Web-App-Spiel und möchte es im Spiel haben, wenn ein Benutzer die Seite oder ihren Browser schließt, werden sie automatisch ausgeloggt. Ich versuchte, das onbeforeunload Ereignis an das Fenster angebracht werden:Wie man den Unterschied zwischen einer Seitenaktualisierung und dem Schließen einer Seite erkennt

window.onbeforeunload = function() { 
    // perform logout functions here 
} 

Das Problem ist, dass auch ausgelöst werden, wenn der Benutzer die Seite aktualisiert wird. Gibt es eine Möglichkeit, festzustellen, ob der Benutzer die gesamte Seite vollständig schließt oder nur auffrischt?

Antwort

8

Es gibt keinen erkennbaren Unterschied. Um einen Benutzer automatisch abzumelden, sollten Sie in Ihrem Cookie einen Ablauf festlegen, der die Anmelde- oder Sitzungsinformationen speichert. Wenn Sie es also für 1 Stunde einstellen, würde der Benutzer nach dieser Zeit im Wesentlichen ausgeloggt werden, da der Cookie zerstört würde. Wenn Sie diese automatische Abmeldung verschieben möchten, während sie noch mit der Site interagieren, können Sie den Ablauf des Cookies jedes Mal zurücksetzen, wenn Sie eine Aktion ausführen (Klicken auf einen Link, Aktivieren eines AJAX-Anrufs usw.). Das würde bedeuten, dass sie nach 1 Stunde Inaktivität abgemeldet werden, im Gegensatz zu nur 1 Stunde nach dem Login, was mehr wie das klingt, was Sie wollen.

Wenn Sie den Ablauf des Cookies auf 0 setzen, wird er nach dem Ende der Sitzung ablaufen. Das tritt normalerweise auf, wenn der Benutzer seinen Browser vollständig beendet. Das ist auch eine andere Option.

2

Wie gesagt, können Sie nicht. Schlimmer noch, dieses Ereignis wurde von vielen Browsern aufgegeben, wahrscheinlich, weil es von bösartigen Skripts missbraucht wurde, die Pop-under machen.

Eine mögliche Problemumgehung ist es, ein Ajax-Skript zu haben, das "nach Hause ruft": wenn es für einige Zeit still ist, hat der Benutzer die Seite einfach verlassen (geschlossene Seite oder Browser).

2

Lassen Sie das onunload -Ereignis eine Anfrage an den Server senden, die dazu führt, dass die Sitzung in n Sekunden abläuft (wobei n die maximale Zeit für das Nachladen einer Seite ist, also vielleicht 10). Lassen Sie dann das Skript für die Site-Prüfung prüfen, ob das Ereignis geplant ist, und brechen Sie es gegebenenfalls ab. Dies würde Ihnen das Verhalten geben, das Sie zu haben scheinen.

Aber ja, ich würde empfehlen, einfach die Sitzung ablaufen zu lassen.

0

Wenn ich mich nicht irre sollte Javascript eine Funktion namens onWindowClose haben, vielleicht versuchen Sie es suchen?

In Bezug auf PHP-Lösungen, ich bin nicht sicher, ob es irgendwelche gibt, aber ich schlage vor, Sie einen kurzen Blick in PHP Connection Handling, insbesondere die connection_aborted() und register_shutdown_function() Funktionen.

Verwandte Themen