Thomas Schmieder: Sessionverwaltung und Authentifikation

Beitrag lesen

Hallo Sven,

damit Du jetzt nicht in die Irre läufst:
Die zitierte Reihenfolge ist dafür verantwortlich, in welcher Reihenfolge die Variablen wieder bereitgestellt werden. Und wenn Du dann z.B. register_globals auf ON stefen hast, werden die Scritpvariablen (also die einfachen $var) in genau dieser Reihenfolge überschrieben. Wenn Du session.auto_start auf ON stehen hast, wird sie vollkommen eingehalten. Wenn die Session erst vom Script gestartet wird, dann werden die Session-Variablen erst dann beeitgestellt. Wenn register_globals auf ON steht, wird Deine Variable $counter (siehe unten) auch überschrieben.

<blockquote>
variables_order = "EGPCS" ; This directive describes the order in which PHP registers GET, POST, Cookie, Environment and Built-in variables (G, P, C, E & S respectively, often referred to as EGPCS or GPC). Registration is done from left to right, newer values overwrite older
</blockquote>

Ähm, dein Zitat zielt vollkommen an meiner Äußerung vorbei. Die Session-Variablen (also die Werte, die weitergereicht werden sollen), sind nicht in EGCPS gespeichert, werden also von dieser Direktive absolut nicht berührt. Die Session-Variablen werden per default (du kannst eigene Mechanismen definieren) in einer Textdatei abgelegt und erst beim Befehl session_start() eingelesen und den Variablen wieder zugewiesen.

Beispiel: Wenn du eine Variable $counter hast, die als Session-Variable registriert ist und dort mit dem Wert 23 abgespeichert wurde, dann passiert sowas:

<?php

echo $count; // gibt den Defaultwert einer nicht-initialisierten Variablen aus (nichts)
$count = 5;
echo $count; // gibt 5 aus
session_start();
echo $count; // gibt 23 aus

?>

Klar dass das nicht funktioniert, weil Deine registrierte Variable ja $counter heißt ;---)

Aber ensthaft: Außerdem würde Dein Beispiel ausgeben, dass die Session nicht gestartet werden kann, da die HTTP-Header schon gesendet sind. Grundregel Nummer eins: kein Session-Start mehr nach einer Ausgabe an den Browser. Man müsste die Ausgaben also zumindest zwischenspeichern.

session_start() und auch session_register() lösen die nachträgliche Kopplung zur Session aus (wenn man nicht session.auto_start=1 bestimmt hat).

Und dann würde Deine Variable $counter auch nur dann überschrieben, wenn Du register_globals=1 gesetzt hast. Es wäre jetzt noch interessant, welcher Wert siegt, wenn man register_globals=0 eingestellt hat und jetzt ein session_register(counter) (das geht mit und ohne Häkchen!) ausführen lässt.

Es ist gut, dass ich gerade mit Dir diese Haken und Ösen hier diskutieren kann. Da habe ich schon überaus positive Erfahrung in der Vergangenheit gemacht. Ich will ja gar nicht Recht haben, nur nachher auch nichts Falsches schreiben.

Du siehst jezt wahrscheinlich selbst, dass ca. 30 Seiten für den ganz geraden Weg und 150 Seiten für die Besprechnung von Irrungen und Wirrungen nicht zuviel sind. Zumal ich ja auch noch eine "Login-Strategie" darin anreißen will.

Die teilt sich dann nochmal, in Login mit und ohne Datenbank. Dabei hilft mit (ich hoffe, er hat es noch nicht vergesen) Fabian. Das gibt dann bestimnmt nochmal 30-70 Seiten.

Jetzt ist aber Schluss, sonst überschreite ich nachher noch die MAX_POST_LINES.

Grüße aus http://www.braunschweig.de

Tom