Tach!
Nach erfolgreichen Logout erhalte ich durch
var_dump($_SESSION['login']);
richtigerweise bool(false) und nach erfolgtem Login bool(true), insoweit also korrekt.
Wenn ich zusammen mit dem Loginscriptvar_dump($_SESSION['login']);
ausgebe, erhalte ich zum Zeitpunkt wo das Loginscript fälschlicherweise aufgerugen wird den Wert NULL, PHP ruft es also richtigerweise auf, da
if (!$_SESSION['login'] or !isset($_SESSION['login']))
zutrifft.
Du hast dein error_reporting nicht auf E_ALL stehen (und/oder display_errors auf off), so dass dir die Notice-Meldungen entgehen. Wenn du auf Variablen (oder Array-Elemente) zugreifen willst, von denen du nicht absolut sicher weißt, dass sie existieren, muss zuerst das isset() verwenden und dann weitere Test in Abhängigkeit davon durchführen. Alternativ geht auch empty(), das ebenfalls keine Notice-Meldungen bei nicht vorhandenen Variablen wirft.
Das NULL bedeutet garantiert, dass die Variable nicht vorhanden ist. Prüf das mit einem E_ALL-error_reporting. Wie lautet die Fehlermeldung? "Undefined variable: _SESSION" oder "Undefined index ..."?
Gebe ich aber nun in die Adresszeile des Browser die URL einer Seite im internen Bereich ein, erhalte ich Zugriff und es wird bool(true) ausgegeben, obwohl ich dem Server _keine_ Logindaten gesendet habe!
Eine Session läuft über die Session-ID. Wenn die nicht in der URL übertragen wird, dann als Cookie in den HTTP-Headern. Schau dir diese an. Die Browser haben dazu eingebaute Tools oder es lassen sich solche nachrüsten: z.B. livehttpheaders-Extension für den Firefox.
Das Problem ist also, wieso wechselt der Server scheinbar willkürlich den Wert von
$_SESSION['login']
von TRUE auf NULL und wieder zurück?
Er wechselt nicht willkürlich, sondern weil er mal Session-Daten hat und mal keine - vermutlich. Die Session-ID auszugeben kann auch für Aufklärung sorgen.
dedlfix.