Prof. Sakkkkarre: Sessionm Cookies und SID

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

  1. Morgen Prof. Eintagsfliege,

    ich gebe gern meinen Senf dazu. Ich mach das aber in dem entsprechenden thread & zur gegebener Zeit.

    Gruss & bis später
    AirMax

  2. Hi,

    Ich möchte hier den Zusammenahang zwischen Session, Cookies und der Konst. SID erlaeutern.

    Wäre schön, wenn du die Zusammenhänge wenigstens verstanden hättest.

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

    Hier zeigt sich, dass *du* noch einiges nicht verstanden hast.

    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.

    Das ist nicht unglaubwürdig, sondern glatt falsch bzw. glatt gelogen.

    • 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.

    Nein, erst mit dem nächsten Request lassen sich darüber Schlüsse ziehen.

    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.

    So ein Humbug.
    Der Server gibt keinerlei „Rückmeldung“ an dieser Stelle.

    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.

    Du offenbar nicht.

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

    Erstens Nein, und zweitens wäre das ganz und gar nicht elegant, eine Session ausschliesslich dafür zu starten.

    Bevor du jetzt mit viel „ja, aber ...“ kommst, tu dir selber bitte den Gefallen, und informiere dich, und versuche selber zu verstehen, wie Sessions im Allgemeinen und bei PHP im Speziellen funktionieren.
    Dein Versuch, dies anderen erklären zu wollen, ohne dass du es selbst verstanden hast, ging erwartungsgemäß in die Hose.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]