Michi: Session-Daten gehen bei Back verloren

Hi,

das Session-Handling im Chat funktioniert so weit, auch wenn ich nun einen "a href"-Link zum Ändern der Profildaten einbaue - auch dabei werden die Session-Daten mitübertragen, wie ein PHP-echo verrät, doch scheinen die Session-Daten beim Klicken von "Back" verloren zu gehen.

Ich lasse das Skript über

<a href="... .php?" . session_name() . "=" . $sid . "...

aufrufen.

Das heißt, die Daten werden an das Skript zwar übergeben, wenn man danach aber "Back" im Browser klickt, um auf die vorherige (aufrufende) Seite zu gelangen (z.B., weil man ganz einfach merkt, dass man sein Profil nun doch nicht ändern mag), sind die Session-Daten weg.

Ist das nicht zu verhindern (was ich mir nicht vorstellen kann) oder was kann man da tun, dass die Session-Daten auch bei "Back" erhalten bleiben?

Gruß Michi

  1. echo $begrüßung;

    Ist das nicht zu verhindern (was ich mir nicht vorstellen kann) oder was kann man da tun, dass die Session-Daten auch bei "Back" erhalten bleiben?

    Du gibst einfach zu wenig Informationen, um als Außenstehender dein Problem nachvollziehen zu können.

    1. Jedes Script, das mit den Sessiondaten arbeiten möchte, muss am Anfang session_start() aufrufen.
    2. Trifft PHP das erste Mal auf session_start(), sendet es einen Cookie an den Client, der die Session-ID (SID) enthält. Alle Daten, die man im Laufe des Scripts in $_SESSION ablegt, werden serverseitig in einer Datei abgelegt, die nach der SID benannt ist.
    3. Erfolgt nun ein weiterer Aufruf eines Scripts (das gleiche oder ein anderes), das ein session_start() enthält, schaut PHP nach, ob der Client ein SID-Cookie mitgesendet hat. Wenn ja, wird die zugehörige Session-Datei geöffnet und die darin enthaltenen Daten stehen wieder zur Verfügung. Wenn nein, geht es bei 2) weiter.
    4. Wenn jemand mit der Back-Funktion auf die "vorherige" Seite geht, hat der Browser zwei Möglichkeiten.
    5. Er kann die Seite einfach aus dem Cache holen und anzeigen.
    6. Ist die Seite im Cache veraltet, oder hat der Browser anderweitig mitgeteilt bekommen, dass die Seite nicht zu cachen ist, erfolgt ein neuer Request an den Server gemäß 3). Normalerweise wird dabei das SID-Cookie mitgesendet.

    Nun gibt es auch noch die Möglichkeit, dass der Client keine Kekse annehmen mag. In dem Fall weicht PHP selbständig auf die Alternative "Anhängen der SID an die URL" aus, wenn session.use_only_cookies auf 0 bzw. off steht und session.use_trans_sid auf 1 bzw. on.
    Macht der Browser nun einen "Back-Request" gemäß 6) und war die vorherige Seite die erste Session-Seite, wie bei 2), gibt es nun keinen SID-Keks und auch noch keine SID in der URL, so dass PHP nichts anderes übrig bleibt, als eine neue Session zu starten.

    echo "$verabschiedung $name";

    1. Hi dedlfix,

      nach kurzem gedanklichen Abgleich Deiner Erläuterungen mit dem Skript kam ich auf die Idee, dass man einfach mal alle Session-Daten an versch. Stellen ausgeben könnte :) und siehe da, die waren beim Skriptwechsel z.T., aber eben auch nur z.T. erhalten geblieben, was ja darauf hinwies, dass die gebrauchte Variable einfach irgendwo überschrieben wurde. Da kamen sich irgendwo die POST- mit den Session-Daten in die Quere.

      Nun überlebt die Session auch ein "Back". :)

      Danke!
      Michi