Prof. Sakkkkarre: Sessionm Cookies und SID

Beitrag lesen

Hallo,

ich hoffe, es ist akzeptabel, das ich einen neuen Thread aufmache.
Hintergrund. Ich möchte hier den Zusammenahang zwischen Session,
Cookies und der Konst. SID erlaeutern.

Der Grund: in eimem anderen Thread zeigt sich, das die Funktion des
Session Moduls scheinbar nicht ausreichend verstanden ist. Hier ein
paar Zitate:

(PHP) URL-Schönheitsfehler: Session-Cookie & erster Request  von AirMax
https://forum.selfhtml.org/?t=194862&m=1303758

Wenn das Login-Formular zum ersten mal aufgerufen wird, wird das
Session-Cookie gespeichert.

(PHP) URL-Schönheitsfehler: Session-Cookie & erster Request  von ChrisB
https://forum.selfhtml.org/?t=194862&m=1303760

So lange du nicht weisst, ob der Client Cookies akzeptiert, gibt es
keine andere Möglichkeit als GET oder POST, um die Session-ID zu übergeben.

(PHP) URL-Schönheitsfehler: Session-Cookie & erster Request  von ChrisB
https://forum.selfhtml.org/?t=194862&m=1303775

Beim ersten Aufruf des Formulars wird die SID an die URL gehängt.
Also: action="/php/login.php?login=blablub"
Deshalb, weil das Cookie noch nicht an den Server geschickt wurde.

Warum übergibst du die SID nicht in einem hidden field?

Also: DEFAKTO (!) wird schon VOR der Ausführung des PHP Codes geprueft,
ob der Client Cookies speichern kann. Defakto meint, dass bei der
Abarbeitung des Codes schon beim ERSTEN AUFRUF DER SEITE bekannt ist,
ob der Client Cookies akzeptiert und das Session Cockie gespeichert
hat. Das klingt ein weinig unglaubwürdig, ist aber so. Bevor ich das
erkläre, noch zwei Randbedinungen:

  • session_start() muss vor der Ausgabe irgeneines Zeichens an den
    Client gestartet werden (da wird schnell mal ein Zeilenumbruch
    übersehen!).
  • es drüfen nat. vor dem session_start() Befehle ohne Ausgabe abgesetzt
    werden; aber erst hinter dem session_start() lässt sich prüfen ob der
    Cookie Mechanismus funktioniert.

Wie funktioniert das? PHP ist eben clever! Wenn ein session_start()
gefunden wird, und noch keine Ausgabe stattfand, dann veranlasst PHP
der WWW-Server das Cookie auf den Client via HTTP-Header zu setzten.
Der WWW-Server gibt dann Rückmeldung an den PHP-Interpreter.

Ob das Cookie setzen erfolgreich war, teilt PHP über die Konstante SID
mit, Wer den Mechanismus verstehen will, sollte also auf seinem Client
einfach die Cookie Akzeptanz ein aus ausstellen und mit session_start()
und SID spielen - man vesteht dann sofort wie das ganze funktioniert.
Um den "ersten Aufruf" zu simulieren sollte man das Cookie im Client
entsprechend häufig löschen ...

Randbemerkung: über session_start() und SID lässt sich auch generell
elegant prüfen, ob ein Client Cookies akzeptiert oder nicht!

Hoffe jemand kann die Infos netzen und bitte nicht Sauer sein über
den Thread - ich denke dies ist ein eigenes Thema weil nicht
Problemorientiert.

Machts gut, Prof. Sakkkkarre