Speicherort für Sitzungsdateien in Apache / PHP

81

Was ist der Standardspeicherort für Sitzungsdateien bei einer Installation von Apache / PHP unter Ubuntu 10.10?

Cambraca
quelle
12
mach einfach eine Seite mit <?php phpinfo() ?>und suche nach dem session.save_path.
Prodigitalson
1
Normalerweise / tmp (IIRC), aber überprüfen Sie Ihre php.ini auf session.save_path
Mark Baker

Antworten:

79

Der Standardwert session.save_path ist festgelegt, ""der im temporären Verzeichnis Ihres Systems ausgewertet wird. Siehe diesen Kommentar unter https://bugs.php.net/bug.php?id=26757 mit folgenden Angaben:

Der neue Standardwert für save_path in der kommenden Veröffentlichung (sic) ist die leere Zeichenfolge, wodurch das temporäre Verzeichnis überprüft wird.

Sie können sys_get_temp_dirden Verzeichnispfad zurückgeben, der für temporäre Dateien verwendet wird

Um den aktuellen Sitzungsspeicherpfad zu finden , können Sie verwenden

In dieser Antwort erfahren Sie, wie der temporäre Pfad lautet, wenn diese Funktion eine leere Zeichenfolge zurückgibt.

Gordon
quelle
68
Und von der Kommandozeile aus machen Sie einfach php -r 'echo session_save_path (), "\ n";'
Richard Ayotte
Der Speicherort ist unter Ubuntu 10.10 festgelegt und nicht "Standard". Ein sauberer Build von PHP kann Ihnen dies geben, aber nicht unter Debian / Ubuntu-Builds, die ich verwendet habe. Die ursprüngliche Frage bezieht sich auf Ubuntu 10.10. Schauen Sie einfach in der Befehlszeile nach dem letzten Kommentar (oder meiner Antwort) nach, da der Speicherort je nach verwendeter Linux-Distribution von 'default' / blank / tmp abweichen kann.
bshea
4
Warnung!! Ich denke, php -r 'echo session_save_path (), "\ n";' Wie oben erwähnt, wird eine andere php.ini-Datei verwendet (möglicherweise /etc/php/7.0/cli/php.ini anstelle von /etc/php/7.0/apache2/php.ini) und daher möglicherweise einen anderen Wert von " session.save_path "
Magmatisch
@Magmatic ist korrekt, es gibt ZWEI php.iniDateien, die php_info()Ihnen sagen, welche während der aktuellen Evaluierung verwendet wird, und locate php.iniIhnen helfen, sie zu finden
Jonathan
Bitte beachten Sie (gemäß den letzten 2 Kommentaren): Die Verwendung der CLI-PHP-Version (Befehlszeile) kann je nach Distribution und Kompilierung zu unterschiedlichen Ergebnissen führen. Die Hauptsache ist, dass es NICHT die Apache-Version ist. (Obwohl die INI-Dateien in Bezug auf Sitzungspfade identisch sein können). Besser in / grep richtig Apache PHP.INI suchen.
bshea
69

Überprüfen Sie zunächst den Wert session.save_pathmit ini_get('session.save_path')oder phpinfo(). Wenn dies nicht leer ist, wird angezeigt, wo die Sitzungsdateien gespeichert sind. In vielen Szenarien ist es standardmäßig leer. In diesem Fall lesen Sie weiter:

Wenn dies auf Ubuntu- oder Debian-Computern session.save_pathnicht festgelegt ist, werden die Sitzungsdateien in gespeichert /var/lib/php5.

Wenn dies auf RHEL- und CentOS-Systemen session.save_pathnicht festgelegt ist, werden Sitzungsdateien in gespeichert/var/lib/php/session

Ich denke, wenn Sie PHP aus dem Quellcode kompilieren session.save_path, werden Sitzungsdateien gespeichert , wenn dies nicht festgelegt ist /tmp(ich habe dies jedoch nicht selbst getestet).

Reich
quelle
1
Ich verwende Ubuntu 12.04.5 LTS und aus irgendeinem Grund (ich habe nichts geändert php.ini) sind meine Sitzungen unter/var/lib/php5/sessions
Felipe
"Nicht eingestellt"? Es ist gesetzt - aber in php.ini auskommentiert. Dies bedeutet nicht, dass es keinen Wert hat oder nicht 'gesetzt' ist. Führen Sie in der Befehlszeile einfach Folgendes aus: php -i | grep session.save_pathFür den Speicherpfad für CLI-Sitzungen (und wahrscheinlich für Apache). Außerdem zeigt ein gegebener php.iniPfad normalerweise den 'Standard'-Pfad an - er ist nur auskommentiert.
bshea
Und ja: Wenn nichts als Standardpfad kompiliert wurde (was bei den meisten Distributionen nicht der Fall ist), wird ein Leerzeichen verwendet (Standard kompilieren). Welches würde dann den Systemtemperaturbereich (normalerweise /tmp) als Fallback / Standardwert verwenden. Bitte beziehen Sie sich auf php.net/manual/en/…
bshea
@bshea, mit "nicht gesetzt" meinte ich auf die leere Zeichenfolge gesetzt
Rich
STANDARD Ubuntu 16.04: /etc/php/7.0/*/php.ini-> ;session.save_path = "/var/lib/php/sessions"- Ein Kommentar bedeutet nicht, dass 'nicht gesetzt' alles ist, was ich meine. Es ist offensichtlich auf etwas anderes als 'leer' (/ tmp) gesetzt .. und ist KEINE leere / null Zeichenfolge
bshea
16

Wenn Sie sich nicht sicher sind, welche Standardeinstellung für kompiliert wurde session.save_path, sehen Sie sich die entsprechenden Informationen an php.ini.
Normalerweise wird hier der auskommentierte Standardwert angezeigt.

Ubuntu / Debian alte / neue php.iniStandorte:
Älteres PHP5 mit Apache: /etc/php5/apache2/php.ini
Älteres PHP5 mit NGINX + FPM: /etc/php5/fpm/php.ini
Ubuntu 16+ mit Apache: /etc/php/*/apache2/php.ini*
Ubuntu 16+ mit NGINX + FPM - /etc/php/*/fpm/php.ini*

* /*/= die aktuell auf dem System installierten PHP-Versionen.

So zeigen Sie die unter Apache verwendete PHP-Version an :

$ a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+"

7.3

Da PHP 7.3 die Version ist, die für dieses Beispiel ausgeführt wird, würden Sie diese für Folgendes verwenden php.ini:

$ grep "session.save_path" /etc/php/7.3/apache2/php.ini

;session.save_path = "/var/lib/php/sessions"

Oder kombinierter Einzeiler:

$ APACHEPHPVER=$(a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+") \ && grep ";session.save_path" /etc/php/${APACHEPHPVER}/apache2/php.ini

Ergebnis:

;session.save_path = "/var/lib/php/sessions"


Oder verwenden Sie PHP selbst, um den Wert mithilfe der "cli" -Umgebung abzurufen (siehe HINWEIS unten):

$ php -r 'echo session_save_path() . "\n";'
/var/lib/php/sessions
$

Diese funktionieren auch:

php -i | grep session.save_path

php -r 'echo phpinfo();' | grep session.save_path

HINWEIS:

Die 'cli'-Version (Befehlszeilenversion) von hat php.ini normalerweise die gleichen Standardwerte wie die Apache2 / FPM-Versionen (zumindest bis zur session.save_path). Sie können auch einen ähnlichen Befehl verwenden, um die aktuellen PHP-Moduleinstellungen des Webservers auf einer Webseite wiederzugeben und die Informationen mit wget / curl abzurufen. Es gibt viele Beiträge zur phpinfo()Verwendung in dieser Hinsicht. Es ist jedoch schneller, nur die PHP-Schnittstelle zu verwenden oder den Standardwert grepkorrekt php.inianzuzeigen.

BEARBEITEN: Per @ aesede Kommentar -> Hinzugefügt php -i. Vielen Dank

bshea
quelle
8
Nur php -izu Ihrer Information, Sie können in CLI tun , um phpinfo () Äquivalent zu erhalten.
Aesede
15

Ein weiterer gängiger Standardspeicherort /tmp/ist/var/lib/php5/

Kevin Borders
quelle
Wie kommt es, dass / var / lib / php5 / niemals beschreibbar ist und chmodding / chowning erfordert? Sollte PHP nicht den Sitzungsort festlegen, der standardmäßig beschreibbar ist?
CMCDragonkai
2
Ich stelle mir vor, dass es auf gemeinsam genutzten Hosts so ist, dass andere Leute nicht versuchen können, die Sitzungen der Leute zu entführen. Das heißt, schreiben Sie in die Sitzung mit dem Namen "Benutzername: admin", legen Sie eine beliebige Sitzungs-ID fest und setzen Sie dann PHPSESSID darauf. Es wäre sehr einfach, auf etwas wie Drupal oder Wordpress in einer gemeinsam genutzten Host-Umgebung zuzugreifen. (Es würde Sie nur als Administratorkonto anmelden)
Mattisdada
4

Ich hatte die gleichen Probleme, den richtigen Pfad für Sitzungen auf einem Mac zu finden. Alles in allem fand ich heraus, dass die CLI PHP ein anderes temporäres Verzeichnis als das Apache-Modul hat: Apache verwendet /var/tmp, während CLI so etwas verwendet /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T. Aber in beide Richtungen sys_get_temp_dir()habe ich den richtigen Weg gefunden, wenn er session.save_pathleer ist. Verwenden von PHP 5.5.4.

themarketka
quelle
1

Keines der oben genannten Verfahren hat bei mir mit dem IUS-Repo für CentOS 7 mit PHP 7.2 funktioniert:

php -v
> PHP 7.2.30 (cli) (built: Apr 19 2020 00:32:29) ( NTS )

php -r 'echo session_save_path(), "\n";
> 

php -r 'echo sys_get_temp_dir(), "\n";'
> /tmp

Sitzungen wurden jedoch nicht im /tmpOrdner gespeichert , sondern im /var/lib/php/mod_php/session/Ordner:

ls /var/lib/php/mod_php/session/
> sess_3cebqoq314pcnc2jgqiu840h0k  sess_ck5dtaerol28fpctj6nutbn6fn  sess_i24lgt2v2l58op5kfmj1k6qb3h  sess_nek5q1alop8fkt84gliie91703
> sess_9ff74f4q5ihccnv6com2a8409t  sess_dvrt9fmfuolr8bqt9efdpcbj0d  sess_igdaksn26hm1s5nfvtjfb53pl7  sess_tgf5b7gkgno8kuvl966l9ce7nn
Tim
quelle
0

Ich glaube es ist in / tmp /. Überprüfen Sie Ihre phpinfo-Funktion, dort sollte irgendwo session.save_path stehen.

profitphp
quelle
Obwohl in den PHP-Dokumenten angegeben ist, dass "/ tmp" die Standardeinstellung ist, legen alle Linux-Distributionen, die ich ausprobiert habe, die Sitzungsdateien nicht ab /tmp- kennen Sie welche? Ist das der Fall, wenn Sie PHP aus dem Quellcode erstellen? Wenn der "session.save_path" leer ist, kann es schwierig sein herauszufinden, wohin die Dateien gehen (daher diese Frage, vermute ich)
Rich
0

Die einzige todsichere Option, um den aktuellen session.save_pathWert zu ermitteln, besteht darin, phpinfo()genau in der Umgebung zu suchen, in der Sie das Sitzungsspeicherverzeichnis ermitteln möchten.

Grund: Es kann alle möglichen Dinge geben, die sich ändern session.save_path, entweder durch Überschreiben des php.iniWerts oder durch Festlegen zur Laufzeit mit ini_set('session.save_path','/path/to/folder');. Beispielsweise passen Webserver-Verwaltungsbereiche wie ISPConfig, Plesk usw. dies häufig an, um jeder Website ein eigenes Verzeichnis mit Sitzungsdateien zuzuweisen.

Tanius
quelle
-8

Je nach Servertyp kann dies variieren. Um das Verzeichnis zu finden, suchen Sie in Ihrer php.ini-Datei nach Folgendem.

upload_tmp_dir = "c: / wamp / tmp"

Das Verzeichnis kann für Sie unterschiedlich sein.

blanknamefornow
quelle
6
Die Frage war für Sitzungsdateien, nicht hochgeladene Dateien
Rich