Signatur
Beschreibung
session_save_path() gibt den Verzeichnispfad zurück, in dem PHP Session-Dateien ablegt. Wird ein Argument übergeben, wird der Pfad gleichzeitig auf diesen neuen Wert gesetzt. Der Pfad entspricht der php.ini-Direktive session.save_path.
Die Funktion muss vor session_start() aufgerufen werden, da der Pfad nach dem Start einer Session nicht mehr geändert werden kann. Sie ist besonders nützlich, wenn Sessions in einem benutzerdefinierten Verzeichnis außerhalb des Standard-Temp-Verzeichnisses gespeichert werden sollen – etwa um die Sicherheit zu erhöhen, mehrere Anwendungen voneinander zu trennen oder Schreibrechte gezielt zu steuern.
Neben einem einfachen Verzeichnispfad kann der Parameter auch ein optionales Tiefenargument der Form N;/pfad enthalten, das eine Verzeichnis-Tiefenstruktur (Directory Depth) für die Session-Dateien vorgibt. Dies verbessert die Performance bei sehr vielen Sessions, erfordert jedoch, dass die Unterverzeichnisse zuvor manuell oder durch ein Skript angelegt werden.
Bei Verwendung alternativer Session-Handler (z. B. Datenbank-Handler) hat dieser Pfad ggf. keine Wirkung – der Wert wird dann möglicherweise für andere Zwecke (z. B. als DSN) genutzt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $path | string | Optionaler neuer Speicherpfad für Session-Dateien. Kann ein einfaches Verzeichnis (/tmp/meine_sessions) oder eine Tiefenangabe (2;/tmp/meine_sessions) sein. Wird kein Wert übergeben oder ein leerer String, bleibt der aktuelle Pfad unverändert. |
Rückgabewert
path-Parameter. Gibt false zurück, wenn ein Fehler aufgetreten ist.Beispiele
Aktuellen Session-Speicherpfad auslesen
<?php
// Nur auslesen, kein Argument → kein Schreibvorgang
$aktuellerPfad = session_save_path();
echo 'Aktueller Session-Pfad: ' . $aktuellerPfad;
?>
Eigenes Session-Verzeichnis setzen
<?php
// Muss VOR session_start() aufgerufen werden!
$sessionPfad = '/var/www/meinprojekt/sessions';
if (!is_dir($sessionPfad)) {
mkdir($sessionPfad, 0700, true);
}
$alterPfad = session_save_path($sessionPfad);
echo 'Alter Pfad: ' . $alterPfad . PHP_EOL;
session_start();
$_SESSION['benutzer'] = 'Max Mustermann';
echo 'Session gestartet in: ' . session_save_path() . PHP_EOL;
?>
Session-Pfad mit Verzeichnis-Tiefe (Directory Depth)
<?php
// '2' bedeutet: 2 Ebenen tief verschachtelte Unterverzeichnisse
// Unterverzeichnisse müssen vorab existieren (z. B. via cron)
session_save_path('2;/var/www/meinprojekt/sessions');
session_start();
echo 'Session-ID: ' . session_id();
?>
// Wichtig · Fallstricke
Sicherheitshinweis: Das Session-Verzeichnis sollte nicht innerhalb des Web-Roots liegen, damit Angreifer Session-Dateien nicht direkt aufrufen können. Die empfohlenen Berechtigungen für das Verzeichnis sind 0700 (nur der Webserver-Prozess darf lesen/schreiben).
Reihenfolge beachten: session_save_path() muss zwingend vor session_start() aufgerufen werden. Ein Aufruf nach dem Session-Start hat keine Wirkung und kann eine Warnung erzeugen.
Directory Depth: Wird die Tiefenangabe (z. B. 2;/pfad) verwendet, müssen alle benötigten Unterverzeichnisse bereits existieren – PHP legt sie nicht automatisch an. Fehlende Unterverzeichnisse führen zu Fehlern beim Schreiben der Session.
Shared Hosting: Auf Shared-Hosting-Umgebungen sollte stets ein applikationsspezifisches Session-Verzeichnis gesetzt werden, da das Standard-Verzeichnis von allen PHP-Anwendungen gemeinsam genutzt wird und dadurch Session-Hijacking zwischen verschiedenen Anwendungen möglich wäre.