2013-06-10 11 views
5

ich eine Option für die Abmeldung haben und hier ist mein Code:Abmelden von allen Sitzung

session_start(); 

session_destroy(); 

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

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

Ich möchte eine andere Option hinzufügen aus aller Sitzung (auf einem anderen Gerät) beispielsweise abzumelden, wenn der Benutzer sein Passwort ändern , alle Sitzungen für diesen Benutzer müssen klar sein und sich von allen abmelden.

Wie kann ich alle Sitzungen auf allen Geräten bearbeiten? Kann ich die Sitzungs-ID in der Datenbank speichern und die Daten mit dem Sitzungsschlüssel ändern? (nicht aktueller Benutzer)

+1

Wenn Ihre Sitzungen in einer Datenbank zusammen mit der Benutzer-ID gespeichert wurden, können Sie einfach alle Datensätze (Sitzungen) für die ID dieses Benutzers löschen. –

+0

wie Sitzungsdaten mit Sitzungsschlüssel löschen? –

Antwort

1

Beste Wette hier wäre, um Ihre eigene Datenbank Base session handler zu erstellen.

Sie haben eine Menge Kontrolle darüber, was Sie mit den Sitzungen dann tun können. Es gibt einen guten aber datierten Artikel here, der ein Beispiel zeigt, wie das gemacht werden kann.

+0

Datenbanken wie MySQL werden übrigens nicht für die Behandlung von Sitzungen erstellt. Sie können aber Leistung wird viel reduzieren. Etwas wie Redis zu verwenden wäre der beste Weg. – Sky

1

Sie können der Benutzer-Tabelle session_expires_at ein Datetime-Feld hinzufügen. Vergleichen Sie bei jedem Seitenwechsel das aktuelle Datum/die aktuelle Uhrzeit mit session_expires_at. Wenn es abgelaufen ist, loggen Sie sich aus. Wenn der Benutzer auf "Ausloggen aus der gesamten Sitzung" klickt, setzen Sie einfach dieses Feld auf now().

Sie können nicht erzwingen, dass eine Seite ohne einen Herzschlag von der Serverseite wechselt (ajax oder socket.io type thing). Dies muss beim Laden der Seite passieren.

+0

Kann ich Sitzungsschlüssel speichern und später mit Sitzungsschlüssel auf diese Sitzung zugreifen? –

+0

Dafür, siehe Orangepill's Antwort. –

-1

Der PHP hat Befehl, um alle Sitzungen zu zerstören, indem Sie den folgenden Befehl:

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

Die erste Zeile verwendet wird, die Sitzung des Lebenszeitwert gleich 0 Sekunden zu beheben. Dann wird die Wahrscheinlichkeit auf 100% aufgeräumt gesetzt.

Wenn Sie das einen bestimmten Benutzer zerstören, dann können Sie die folgenden Anweisungen, um Ihre Session-Handler hinzu:

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

Dies beendet alle Sitzungen von allen Benutzern. Das ist wahrscheinlich eine schlechte Sache hier. –

+0

Ich möchte nicht alle Sitzung löschen –

+1

@Ali Akbar, ich habe meinen Kommentar bearbeitet. Sie können den zweiten Ansatz verwenden. – lvarayut