2012-11-22 5 views
19

Ho creato la pagina di accesso, in base a localStorage. Al caricamento della pagina ho controllato il valore di localStorage. Se ho aperto la pagina Web in più di una scheda e poi mi disconnetto da una qualsiasi delle schede, tutte le pagine rimanenti dovrebbero uscire automaticamente.Esegui il logout di tutte le schede aperte automaticamente quando l'utente si disconnette in uno di essi

Se ricarica/aggiornamento significa disconnessione.

Please help me per eseguire uno script, quando l'utente visualizzare la pagina o dire qualsiasi altro modo per risolvere questo problema.

+0

Ho modificato il titolo della domanda per renderlo più pertinente alla domanda che stai effettivamente chiedendo –

risposta

1

Basta scrivere un piccolo javascript che controlla ogni 100 ms (ad es.) Se la "sessione" memorizzata in localStorage è ancora esistente. Se no, aggiorna la pagina. Potresti usare setInterval per questo.

+0

e qui stavo effettuando ripetute chiamate ajax ogni 5 secondi come un cesso. Questa è un'idea fantastica. –

+0

Oppure potresti usare gli eventi e risparmiarti del tempo di CPU! –

+1

non dovrebbe interrogare localStorage invece di sessionStorage? sessionStorage non è condiviso tra le schede. – AlexStack

5

"localStorage persiste qualsiasi salvati dati a tempo indeterminato sul computer dell'utente e attraverso le schede del browser" Source

Questo significa che se si vuota/cancellare i dati di login che hai impostato in uno scheda, i dati verranno modificati anche in tutte le altre schede.

Quindi, se l'utente si disconnette, i dati di localStorage cambiano.
Poi, le schede, verificare se un utente cambia concentrano a quella scheda di nuovo utilizzando l'evento onfocus:

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

Questo significa che non sarà sempre l'esecuzione di JavaScript, o ricaricare (un possibilmente grandi quantità di) schede allo stesso tempo.

+1

Cosa succede con i downvotes o.O Sarebbe bello se le persone dessero effettivamente una ragione ... – Cerbrus

+2

Non è consigliabile per gli eventi "hard-wire" - puoi facilmente sostituire i gestori di eventi in questo modo. Usa invece 'window.addEventHandler'. –

+0

Ottenuto, modificato. – Cerbrus

38

È possibile utilizzare Storage events per ricevere una notifica quando vengono modificati i valori di localStorage.

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

Se, ad esempio, una delle schede si disconnette:

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

Allora tutti altri schede riceveranno un StorageEvent, e apparirà un avviso:

Logged in: false 

Spero che questo risponda alla tua domanda!

+0

grazie mille !!! la fonte ha aiutato molto !! – Diego

Problemi correlati