2012-11-22 8 views
19

Ich habe eine Login-Seite basierend auf localStorage erstellt. Beim Laden der Seite habe ich den Wert von localStorage überprüft. Wenn ich die Webseite in mehr als einer Registerkarte geöffnet habe und mich dann von einer der Registerkarten abmelde, sollten sich alle verbleibenden Seiten automatisch ausloggen.Alle geöffneten Tabs automatisch abmelden, wenn sich der Benutzer in einem davon abmeldet

Wenn neu laden/aktualisieren bedeutet es abmelden.

Bitte helfen Sie mir, ein Skript auszuführen, wenn Benutzer die Seite anzeigen oder eine andere Möglichkeit sagen, um dieses Problem zu lösen.

+0

Ich bearbeitet Ihren Fragetitel, um es relevanter für die Frage zu machen, die Sie tatsächlich fragen –

Antwort

1

Schreiben Sie einfach ein kleines Javascript, das alle 100ms überprüft (zB) ob die gespeicherte "Sitzung" in localStorage noch existiert. Wenn nicht, aktualisieren Sie die Seite. Sie könnten hierfür setInterval verwenden.

+0

und hier machte ich wiederholt Ajax Anrufe alle 5 Sekunden wie ein Trottel. Das ist eine fantastische Idee. –

+0

Oder Sie könnten Ereignisse verwenden und sparen Sie etwas CPU-Zeit! –

+1

sollte er nicht localStorage statt sessionStorage abfragen? sessionStorage wird nicht zwischen Tabs geteilt. – AlexStack

5

„local bleibt alle gespeicherten Daten auf unbestimmte Zeit auf dem Computer des Benutzers und über Browser-Tabs“ Source

Das bedeutet, dass, wenn Sie leer/entfernen Sie die Login-Daten, die Sie in eins gesetzt haben Registerkarte werden die Daten auch in allen anderen Tabs geändert.

Wenn sich der Benutzer also abmeldet, ändert sich die localStorage-Daten.
Dann auf Ihre Tabs, erkennen, wenn ein Benutzer Änderungen wieder auf der Registerkarte fokussieren das onfocus Ereignis mit:

function onFocus(){ 
//Reload Page if logged out (Check localStorage) 
    window.location.reload(); 
}; 

if (/*@[email protected]*/false) { // check for Internet Explorer 
    document.addEventHandler("focusin", onFocus); 
} else { 
    window.addEventHandler("focus", onFocus); 
} 

Source

Das heißt, Sie werden nicht ständig werden Javascript ausgeführt wird, oder Neuladen (a möglicherweise große Anzahl von) Tabs gleichzeitig.

+1

Was ist mit den downvotes o.O Es wäre nett, wenn Leute tatsächlich einen Grund geben würden ... – Cerbrus

+2

Es ist nicht ratsam, Ereignisse "fest zu verdrahten" - Sie können Ereignishandler auf diese Weise sehr leicht überschreiben. Verwenden Sie stattdessen 'window.addEventHandler'. –

+0

Verstanden, modifiziert. – Cerbrus

38

Sie können Storage events verwenden, um benachrichtigt zu werden, wenn localStorage-Werte geändert werden.

function storageChange (event) { 
    if(event.key === 'logged_in') { 
     alert('Logged in: ' + event.newValue) 
    } 
} 
window.addEventListener('storage', storageChange, false) 

Wenn zum Beispiel meldet sich eine der Registerkarten aus:

window.localStorage.setItem('logged_in', false) 

Dann werden alle andere Tabs ein StorageEvent erhalten wird, und eine Warnung wird angezeigt:

Logged in: false 

Ich hoffe, das beantwortet deine Frage!

+0

vielen Dank !!! Die Quelle hat sehr geholfen !! – Diego

Verwandte Themen