2013-06-10 15 views
5

ho un'opzione per la disconnessione e qui è il mio codice:Esci da tutte le sessioni

session_start(); 

session_destroy(); 

setcookie("key","",time()-60*60*24); 

setcookie("username","",time()-60*60*24); 

Voglio aggiungere un'altra opzione per il logout da tutte le sessioni (su un altro dispositivo) ad esempio se l'utente cambia la sua password , tutte le sessioni per questo utente sono chiare e disconnesse da tutti.

Come posso modificare tutte le sessioni su tutti i dispositivi? Posso memorizzare l'ID di sessione nel database e modificare i dati con la chiave di sessione? (non utente corrente)

+1

se le sessioni sono state memorizzate in un database, insieme all'ID dell'utente, è possibile semplicemente eliminare tutti i record (sessioni) per l'ID di quell'utente. –

+0

come cancellare i dati di sessione con la chiave di sessione? –

risposta

1

migliore qui sarebbe quello di creare la propria base dati session handler.

Avrai molto controllo su ciò che puoi fare con le sessioni. C'è un buon articolo datato here che mostra un esempio di come si può fare.

+0

A proposito, database come MySQL non sono creati per gestire le sessioni. Possono, ma le prestazioni ridurranno A LOT. Usare qualcosa come Redis sarebbe il modo migliore. – Sky

1

È possibile aggiungere un campo data/ora alla tabella utente denominata session_expires_at. Ad ogni pageload, confronta la data/ora corrente con session_expires_at. Se è scaduto, disconnettili. Quando l'utente fa clic su "Esci da tutte le sessioni", imposta semplicemente tale campo su now().

Non è possibile forzare la modifica di una pagina dal lato server senza qualche heartbeat (tipo ajax o socket.io). Dovrà accadere sui carichi di pagina.

+0

posso memorizzare la chiave di sessione e accedere a quella sessione con la chiave di sessione in seguito? –

+0

Per quello, vedere la risposta di Orangepill. –

-1

Il php ha il comando di distruggere tutte le sessioni utilizzando il seguente comando:

ini_set('session.gc_max_lifetime', 0); 
ini_set('session.gc_probability', 1); 
ini_set('session.gc_divisor', 1); 

La prima linea è usata per fissare il valore durata della sessione pari a 0 secondi. Quindi, la probabilità è impostata al 100% ripulito.

Se avete bisogno di distruggere un particolare utente, è possibile aggiungere le seguenti istruzioni al gestore di sessione:

if ($_SESSION['username'] == 'user to delete') { 
    session_destroy(); 
} 
+3

Questo finirà tutte le sessioni da tutti gli utenti. Questa è probabilmente una brutta cosa qui. –

+0

Non voglio cancellare tutte le sessioni –

+1

@Ali Akbar, ho modificato il mio commento. puoi usare il secondo approccio. – lvarayut

Problemi correlati