Wo sind $ _SESSION-Variablen gespeichert?

158

Werden $_SESSIONVariablen auf dem Client oder dem Server gespeichert?

Steve Gattuso
quelle
Auf dem Server, auf dem Sie die PHP-Anwendung ausführen, müssen Sie für einen bestimmten Pfad mit phpinfo ()
Densityx

Antworten:

168

Der Speicherort des $_SESSIONvariablen Speichers wird durch die session.save_pathKonfiguration von PHP bestimmt . Normalerweise ist dies /tmpauf einem Linux / Unix-System. Verwenden Sie die phpinfo()Funktion, um Ihre speziellen Einstellungen anzuzeigen, wenn Sie nicht 100% sicher sind, indem Sie eine Datei mit diesem Inhalt in DocumentRootIhrer Domain erstellen :

<?php
    phpinfo();
?>

Hier ist der Link zur PHP-Dokumentation zu dieser Konfigurationseinstellung:

http://php.net/manual/en/session.configuration.php#ini.session.save-path

rjamestaylor
quelle
129

Wie bereits erwähnt, werden die Inhalte auf dem Server gespeichert. Die Sitzung wird jedoch durch eine Sitzungs-ID identifiziert, die auf dem Client gespeichert und bei jeder Anforderung gesendet wird. Normalerweise wird die Sitzungs-ID in einem Cookie gespeichert, sie kann jedoch auch an URLs angehängt werden. (Das ist der PHPSESSIDAbfrageparameter, den Sie manchmal sehen)

troelskn
quelle
41
+1, weil Sie impliziert haben, dass Cookies den Inhalt von $ _SESSION nicht speichern (diese Inhalte werden auf dem Server gespeichert, sind also nicht anfällig für Änderungen durch den Client)
Shufler
12
Hervorragende Antwort! Ich habe nach der Frage gesucht: "Warum laufen Sitzungen nach dem Löschen des Browser-Cache ab?". Und du hast meinen Tag gerettet.
Schüler
2
Server erstellen Datei sess_7nu9p0fvidvva6ouaugqcc8292 und auf Browser-Warnung (getCookie ('PHPSESSID')); // 7nu9p0fvidvva6ouaugqcc8292
zloctb
2
Plus1 - Zur Beantwortung der Frage: "... auf dem Client oder Server gespeichert?"
Alex Vargas
22

Sie werden normalerweise auf dem Server gespeichert. Wo sie gespeichert sind, liegt bei Ihnen als Entwickler. Mit der session.save_handlerKonfigurationsvariablen und können Sie session_set_save_handlersteuern, wie Sitzungen auf dem Server gespeichert werden. Die Standard-Speichermethode ist das Speichern von Sitzungen in Dateien. Wo sie gespeichert werden, wird von der session.save_pathVariablen gesteuert .

Rob Kennedy
quelle
18

Ein Zusatz: Es sollte beachtet werden, dass, falls "/ tmp" das Verzeichnis ist, in dem die Sitzungsdaten gespeichert sind (was der Standardwert zu sein scheint), die Sitzungen nach dem Neustart dieses Webservers nicht als "/ tmp" bestehen bleiben "wird beim Neustart häufig gelöscht. Das Konzept einer clientweisen Persistenz steht und fällt mit der Persistenz des Speichers auf dem Server - was fehlschlagen kann, wenn das Verzeichnis "/ tmp" für Sitzungsdaten verwendet wird.

Gero
quelle
13

Unter Debian (ist dies bei den meisten Linux-Distributionen nicht der Fall?) Wird es in / var / lib / php5 / gespeichert. Wie oben erwähnt, ist es in Ihrer php.ini konfiguriert.

Hans
quelle
12

Ich benutze Ubuntu und meine Sitzungen sind in / var / lib / php5 gespeichert.

Vasyl Teraz
quelle
1
Danke, das ist alles was ich wollte. Ja, wenn sie nicht an der üblichen Stelle wären, müsste ich die INIs aufbrechen, aber ich wollte nur wissen: "Hey, wo werden die Sitzungen normalerweise gespeichert?" / var / lib / php / session / es ist.
Eric L.
7

Wie Mr. Taylor betonte, wird dies normalerweise in php.ini eingestellt. Normalerweise werden sie als Dateien in einem bestimmten Verzeichnis gespeichert.

Brian Fisher
quelle
4

Für Ubuntu 16.10 werden Sitzungen in / var / lib / php / session / ... gespeichert.

Lukáš Kříž
quelle
0

Wie funktioniert es? Woher weiß es, dass ich es bin?

In den meisten Sitzungen wird auf dem Computer des Benutzers ein Benutzerschlüssel (als Sitzungs-ID bezeichnet) festgelegt, der ungefähr so ​​aussieht: 765487cf34ert8dede5a562e4f3a7e12. Wenn eine Sitzung auf einer anderen Seite geöffnet wird, durchsucht sie den Computer nach einem Benutzerschlüssel und wird zum Server ausgeführt, um Ihre Variablen abzurufen.

Wenn Sie versehentlich den Cache leeren, wird auch Ihr Benutzerschlüssel gelöscht. Sie können Ihre Variablen nicht mehr vom Server abrufen, da Sie Ihre ID nicht kennen.

Emeka Obianom
quelle
0

In meiner Ubuntu-Maschine werden Sitzungen bei gespeichert

/var/lib/php/sessions

und du musst sudo lsin dieses Verzeichnis nur lswerfen

ls: Verzeichnis '.' kann nicht geöffnet werden. Berechtigung verweigert

Und auf meinem Windows Wamp Server werden PHP-Sitzungen in gespeichert

C:\wamp64\tmp

und wenn Sie eigenständiges PHP unter Windows installieren, ist standardmäßig kein Wert festgelegt

session.save_path => no value => no value
Ali A. Dhillon
quelle