79 Stimmen

PHP Session Variablen (PHPSESSID) auch unter Subdomains verfügbar machen

Tipp von Stefan Trost | Letztes Update am 19.05.2021 | Erstellt am 04.12.2012

Bei der Verwendung von PHP-Session-Variablen, gibt es den Nachteil, dass die Variablen nicht automatisch auch unter allen Unterdomains (Subdomains) verfügbar sind. In diesem Tipp möchte ich euch zeigen, wie ihr diese Grundeinstellung von PHP umgehen könnt und damit eure Session-Variablen auch unter Subdomains auslesen und nutzen könnt.

Das Problem

Benutzen wir unter www.example.com den Code

session_start();
$_SESSION['var'] = 1;

um eine Session zu starten und eine Session-Variable zu setzen, ist diese Session Variable zwar unter www.example.com, nicht aber unter sub.example.com verfügbar.

Der Grund: Die Default-Werte beziehungsweise Default-Einstellungen von session_start() setzen die Session so, dass sie nur für den aktuellen Pfad und für die aktuelle Domain verfügbar sind (also der Pfad und die Domain unter der die Session gestartet wurde). In unserem Beispiel also für "www.example.com" aber beispielsweise nicht für "sub.example.com" oder eine andere Subdomain unter example.com.

Die Lösung

Ich möchte euch zwei Lösungsansätze zeigen, wie ihr das Problem umgehen könnt. Beide Ansätze überschreiben temporär die Standard-Einstellungen und ermöglichen es so, den Session Cookie auch unter Subdomains verfügbar zu machen.

Ansatz 1

session_set_cookie_params(0, "/", ".example.com");
session_start();
$_SESSION['var'] = 1;

Mit session_set_cookie_params() lassen sich die Cookie-Parameter aus der php.ini für die Laufzeit des aktuellen Skripts anpassen (das heißt man muss die Parameter vor jedem erneuten Setzen von Variablen in einem anderen Skript erneut setzen).

Der erste Parameter (lifetime) ist für uns hier irrelevant, daher übergeben wir den Default-Wert 0 (bis der Browser geschlossen wird). Der zweite Parameter ist der Pfad, der dritte die Domain. Dadurch, dass wir einen Punkt vor die Domain schreiben, ist unsere Session-Variable neben www.example.com auch auf allen Subdomains wie sub.example.com oder de.example.com verfügbar, unabhängig, unter welcher Domain wir die Session starten.

Ansatz 2

ini_set('session.cookie_path', '/');
ini_set('session.cookie_domain', '.example.com');
session_start();
$_SESSION['var'] = 1;

Alternativ kann man auch ini_set() benutzen. Hier ändern wir die Optionen "session.cookie_path" und "session.cookie_domain" für die Laufzeit des aktuellen Skripts in gleicher Weise wie im ersten Ansatz.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.