Gibt es in PHP eine Möglichkeit, eine Liste aller Sitzungen (und der darin enthaltenen Variablen) auf dem Server abzurufen?
Grundsätzlich haben wir eine Wartungsfunktion, die wissen muss, welche Benutzer derzeit auf der Website angemeldet sind. Wir speichern bereits Daten für jeden Benutzer in einer Session-Variablen, aber ich hoffe, dass ich jede dieser Sessions durchlaufen und die benötigten Daten herausholen kann.
MEIN PHP ist sehr begrenzt (ich bin normalerweise ein .Net-Entwickler), aber wenn jemand weiß, ob dies überhaupt möglich ist (und wie es geht), wäre ich sehr dankbar. Ich habe das gegoogelt, und die Ergebnisse, die ich gefunden habe, deuteten darauf hin, dass es NICHT möglich war, aber ich finde es sehr schwer zu akzeptieren.
Trotzdem, wenn Sie nicht können, können Sie nicht, aber ich dachte, meine Freunde auf StackOverflow könnten mir eine endgültige Antwort geben!
cmptrgeekken
PHP speichert Sitzungsdaten für jeden Benutzer in einem temporären Ordner auf dem Server. Dieser Ordner ist in der Konfigurationsdatei php.ini unter der Variable session.save_path definiert. Suchen Sie diesen Wert in Ihrer php.ini-Datei oder erstellen Sie alternativ eine php-Datei mit:
<?php echo "Session Save Path: " . ini_get( 'session.save_path');?>
wie sein Inhalt, und öffnen Sie die Datei in Ihrem Browser.
Sobald Sie den Speicherpfad für die Sitzungsdaten gefunden haben, öffnen Sie diesen Ordner und Sie werden eine ziemlich einfache Struktur bemerken. Alle Sitzungen werden im Format gespeichert: sess_$SESSIONID .
Sitzungsdaten werden serialisiert, bevor sie auf der Festplatte gespeichert werden. Daher müssten in der Sitzungsdatei gespeicherte Objekte deserialisiert werden, bevor sie verwendet werden können. Wenn Sie jedoch Klartext verwenden, der unverändert gespeichert wird, um Ihre Sitzungsdaten zu speichern (z. $_SESSION['userid'] = 1234), um Informationen über Ihre Benutzer zu speichern, sollte es einfach genug sein, die gesuchten Daten aus den Dateien herauszuparsen.
Noch etwas … Ich habe es nicht untersucht, aber es scheint, als ob die Sitzungs-ID, die im Dateinamen erscheint, direkt zum Beispiel dem Namen des PHPSESSID-Cookies entspricht, das auf dem Computer des Benutzers gespeichert ist. In Anbetracht dessen ist es möglicherweise möglich, die Dateien im temporären Sitzungsverzeichnis zu durchlaufen, alle $SESSIONID-Werte abzurufen und die aktuelle Sitzungs-ID mit festzulegen session_id($SESSIONID)starten Sie eine Sitzung mit session_start() und greifen Sie über PHP auf die benötigten Daten zu, ohne die Inhaltsdateien selbst analysieren zu müssen. Kann jemand bestätigen, ob dies möglich wäre oder nicht?
Bearbeiten: Post angepasst, um mit Itays Kommentar übereinzustimmen.
Es ist erwähnenswert, dass diese Art von Hacks eine schreckliche Idee sind. PHP hat eine „Share Nothing“-Architektur und der Versuch, sie zu hacken, wäre, als würde man einen Schraubenzieher zum Einpflanzen von Nägeln verwenden. Anstatt Serwer-interne Dateien zu analysieren, erstellen Sie Ihre eigenen oder verwenden Sie besser eine Datenbank, um alles zu speichern, was Sie benötigen.
– smentek
27. Juli 11 um 8:49 Uhr
php hat die Option, Sitzungsdaten im Speicher zu speichern. nicht immer können wir sie aus Dateien herausholen.
– Jondinham
19. November 11 um 6:31 Uhr
und darüber hinaus können diese “ses_*”-Dateien unter einer mehrstufigen Verzeichnisstruktur abgelegt werden. so steht es in php.net
– Jondinham
20. November 11 um 4:56 Uhr
Können Sie auch feststellen, welche von ihnen atm aktiv sind?
– JRsz
13. November 15 um 18:20 Uhr
Hier ist ein prägnanterer Weg, um eine Liste der Sitzungen über die gespeicherten Dateien zu erhalten:
<?php
print_r(scandir(session_save_path()));
?>
Dadurch erhalten Sie die Daten für alle Sitzungen, die in einem Array gespeichert und nach Sitzungs-ID indiziert sind:
Schließlich – es hat viel zu lange gedauert, diese Antwort zu finden. Danke!
– Benutzer1274820
6. August 18 um 6:23 Uhr
Während dies alle Sitzungen anzeigt, werden Sie auch bei der letzten sichtbaren Sitzung angemeldet. Gibt es eine Möglichkeit, die aktuelle Sitzung des Benutzers wiederherzustellen (insbesondere eine “nicht angemeldete” Sitzung)?
– Benutzer1274820
6. August 18 um 6:25 Uhr
@ user1274820 Sie müssen nur tun $originalSession = session_id(); davor und session_id($originalSession); session_start(); nach. Dadurch wird die ursprüngliche Sitzung wiederhergestellt.
– dmikam
4. Februar 19 um 9:42 Uhr
Ich habe die @mgroat-Methode im Ajax-Aufruf verwendet, aber es gibt ein Problem im Header der HTTP-Antwort, dass der Set-Cookie-Header mehrmals angezeigt wird und jQuery einen Fehler meldet:
Der Set-Cookie-Header wird als Antwort von der URL ignoriert: mysite.com/admin/ajax/main_ajax. Die Cookie-Länge sollte kleiner oder gleich 4096 Zeichen sein.
Die Lösung ist hinzuzufügen header_remove("Set-Cookie") gleich nach session_start().
.
8213800cookie-checkAlle Sitzungen eines Servers in PHP durchlaufenyes