Google weiß alles: PHP Loginsystem - wie werden Sessions gespeichert

Beitrag lesen

Ein Folgefehler: Es wurde bereits Text ausgegeben (nämlich die vorherige Meldung), deswegen können keine HTTP-Header mehr gesendet werden. Der Redirect (Location-Header) bleibt also wirkungslos. So ganz verstanden habe ich das noch nicht wirklich. Danke für deine Antworten, ich werde weiter recherchieren, nehme aber auch gerne weitere Anmerkungen, für Laien verständlicher, entgegen ;)

Normalerweise sieht bei einer Weiterleitung das, was ein Webserver sendet, ETWA so aus:

302 Found
Location: https://foo.bar/foobar/login.php
Date: Mon, 13 Jun 2016 17:34:14 GMT
Content-Type: text/html; charset=utf-8

<!doctype html>
<html>
<head>
<META HTTP-EQUIV="refresh" CONTENT="0; URL=https://foo.bar/foobar/login.php">
<title>302 - Weiterleitung</title>
<script>
location.href="https://foo.bar/foobar/login.php";
</script>
</head>
<body>
<h1>302 - Weiterleitung</h1>
<p><a href="https://foo.bar/foobar/login.php">Ups. Melden Sie sich erst mal an!</a></p>
</body>
</html>

... also Header-Zeilen, Leerzeile, Payload (hier: HTML). In der Quelltextansicht des Browsers siehst Du nur den payload.

Wenn Du jetzt ein fehlerhaftes Skript hast, dann wird das hier ausgegeben:


<p>Error in Zeile 234! foo bla blubb!</p>

Jeder Versuch, jetzt noch Header zu schreiben, scheitert, weil die Header vor dem Payload (den Ausgaben) stehen müssen (gefolgt von einer Leerzeile). PHP hat durch das Übergeben der Fehlermeldung dem Webserver aber schon erzählt, dass da keine Header mehr kommen und kann das nicht zurücknehmen, weil der das womöglich sogar schon dem Useragent gesendet hat. Eine Rücknahme gesendeter Inhalte ist im HTTP-Protokoll nicht vereinbart.

Lösung:

  • Laufzeit-Konfiguration der Ausgabepufferung. Dann ist PHP dafür zuständig alles einzusammeln und am Ende der Skriptverarbeitung Header und Payload schön sortiert an den bis dahin treudoof wartenden Webserver zu geben.
  • Oder: Aufpassen, dass vor den Headern nichts gesendet wird. Auch keine Fehlermeldungen. Schau Dir an, was Du installiert hast. (auth_config.php) Und was mit DEBUG gemacht wird.
  • Bei sehr großen Datenmengen oder sehr langwierigen Ermittlungen der Einzelddaten kann das Puffern des Outputs nachteilig sein, weil der User-agent oder User womöglich meint, dass da nichts mehr kommt.

XAMPP

Beschissen vorkonfiguriertes "Zeuch".