Daywalker: Sessionvariablen und file_get_contents

Beitrag lesen

Nun rufe ich mit $status = $pipeline->process_batch($textpdf, $g_media);

eine Memberfunktion der Klasse Pipeline auf. Innerhalb dieser Klasse findet die Funktion file_get_contents($file) statt. $file ist eine URL. Diese URL lautet zum Beispiel bericht.php. Und hier liegt der Haken. Diese URL benötigt einige Sessionvariablen, z.B. einen in der Session gespeicherten Uernamen und ein Passwort, um die Leseberechtigung des Benutzers überprüfen zu können.

Meinst du nicht auch, dass es reichlich idiotisch ist, wenn dein Skript - welches die Sessiondaten verfügbar hat - eine Methode aufruft, die sich via HTTP wieder mit sich selbst verbindet, um dort dann auf die gleichen Sessionwerte zurückzugreifen, die du sowieso schon verfügbar hättest?

Das kostet dich erstens kräftig Performance (ein weiterer HTTP-Request vom Webserver ist belegt, das kostet vor allem Zeit), zweitens erfordert es potentiell unsichere PHP-Einstellungen (allow_url_fopen = on ist längst nicht mehr bei allen Providern anzutreffen, weil einfach zuviele schlecht geschriebene Skripte damit Schadcode included haben), und drittens kriegst du damit eben keinen Session-ID-Transfer über die mittlerweile zwischen dem Server und dem Browser ausgehandelte Session-ID-Transportmethode (Cookies oder GET) hin.

Leider schaffe ich es nicht, das diese Variablen dem Skript in file_get_contents zur Verfügung stehen. Derzeit versuche ich es durch:

  • anhängen der SID=session_id() als Get-Variable

Logischerweise darfst du die Konstante SID hier nicht verwenden, weil diese ja in Abhängigkeit der Akzeptanz von Cookies des Browsers belegt ist. Du mußt zwingend mit session_name() und session_id() arbeiten.

  • und in der URL mit session_id(strip_tags($_GET['sid']));
      session_start();

Das wiederum ist kompletter Blödsinn. Einfaches session_start() reicht vollkommen aus. Den Rest macht PHP.