Start · Sprachen · PHP · Referenz · session_save_path

session_save_path

Funktion

Liefert den aktuellen Speicherpfad für Session-Dateien und setzt optional einen neuen Pfad.

seit PHP 4.0.0 Kategorie: http

Signatur

session_save_path(string $path = ''): string|false

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

Typ
string|false
Beschreibung
Gibt den aktuell gesetzten Speicherpfad als String zurück – also den Wert vor einer etwaigen Änderung durch den 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;
?>
Aktueller Session-Pfad: /var/lib/php/sessions

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;
?>
Alter Pfad: /var/lib/php/sessions Session gestartet in: /var/www/meinprojekt/sessions

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();
?>
Session-ID: abc123def456...

// 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.