Günther S: Cookies erst nach Refresh der Seite verfügbar?

Hallo zusammen,

ich habe mit meinem PHP-Script ein kleines Problem.
Hier erstmal ein kleiner Code-Ausschnitt:

<?php

// Cookie setzen
if(isset($_POST['Submit']) AND $_POST['Submit'] == 'Produkt merken')
{
    setcookie('Produkt['.$_GET['id'].']', $_GET['id'], time() + 3600*24);
}

if(isset($_COOKIE['Produkt']))
{
    foreach($_COOKIE['Produkt'] AS $ProduktID)
    {
        echo "Folgende ProduktID wurde gemerkt: " . $ProduktID . "<br>";
    }
}

?>

Jetzt hätte ich gerne, dass schon bei dem Seitenaufruf, bei dem das Cookie gesetzt wird, in der Liste die ProduktID ausgegeben wird - das funktioniert aber bei mir erst nach einem Refresh der Seite - wieso?
Und wie bringe ich es fertig, dass das doch funktioniert wie gewünscht?

Grüße,
Günther

  1. Hi,

    setcookie('Produkt['.$_GET['id'].']', $_GET['id'], time() + 3600*24);

    in der Response zum aktuellen Request wird dem Client also ein Cookie mitgeschickt.

    if(isset($_COOKIE['Produkt']))

    Hier prüftst Du, ob im aktuellen Request bereits ein Cookie vom Client mitgesendet wurde.

    Das oben gegebene Cookie konnte der Client natürlich beim aktuellen Request noch nicht mitschicken, er hat ja die Response, in dem ihm die Existenz dieses Cookies mitgeteilt wird, noch gar nicht erhalten.

    Jetzt hätte ich gerne, dass schon bei dem Seitenaufruf, bei dem das Cookie gesetzt wird, in der Liste die ProduktID ausgegeben wird - das funktioniert aber bei mir erst nach einem Refresh der Seite - wieso?

    Siehe oben. Der Client konnte das Cookie beim ersten Aufruf noch nicht mitschicken, weil er es noch gar nicht hatte - bei einem Refresh hat er es aber und kann es ggf. mitschicken (falls er überhaupt Cookies akzeptiert und der User auch dieses spezielle Cookie zugelassen hat).

    Und wie bringe ich es fertig, dass das doch funktioniert wie gewünscht?

    Nicht mit Cookie. Das _kann_ nicht funktionieren.

    Aber in Deinem Script hast Du ja die Daten, die Du ins Cookie schreiben willst, also kannst Du die ja auch in die Ausgabe schreiben.

    Ach ja: die Anzahl der Cookies pro Seite ist begrenzt. Wenn jemand also viel bei Deinem Shop bestellen will, hast Du ein Problem.
    Es wäre m.E. sinnvoller, den Warenkorb-Inhalt nicht in Cookies zu speichern.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo Andreas,

      Nicht mit Cookie. Das _kann_ nicht funktionieren.

      vielen Dank für die prompte Antwort!

      Gruß,
      Günther

  2. Hello,

    Hallo zusammen,

    ich habe mit meinem PHP-Script ein kleines Problem.
    Hier erstmal ein kleiner Code-Ausschnitt:

    <?php

    // Cookie setzen
    if(isset($_POST['Submit']) AND $_POST['Submit'] == 'Produkt merken')
    {
        setcookie('Produkt['.$_GET['id'].']', $_GET['id'], time() + 3600*24);
    }

    Diese Information steht erst beim nächsten Request auf dem Server zur Verfügung

    if(isset($_COOKIE['Produkt']))
    {
        foreach($_COOKIE['Produkt'] AS $ProduktID)
        {
            echo "Folgende ProduktID wurde gemerkt: " . $ProduktID . "<br>";
        }
    }

    ?>

    Jetzt hätte ich gerne, dass schon bei dem Seitenaufruf, bei dem das Cookie gesetzt wird, in der Liste die ProduktID ausgegeben wird - das funktioniert aber bei mir erst nach einem Refresh der Seite - wieso?
    Und wie bringe ich es fertig, dass das doch funktioniert wie gewünscht?

    Gar nicht.
    Du kannst nur so tun als ob.
    Auf dem Server ist ja schon bekannt, dass das Produkt gemerkt werden soll.
    Also kannst Du auch in das Array $_COOKIE einfach eintragen und _dann_ die Abfrage durchführen.

    Ob der Cookie dann allerdings auf dem Client tatsächlich angenommen wird, weißt Du nicht im Voraus.

    Beim nächsten Request stehen bei Scriptanfang aber wieder die Cookies im Array, die vom Client kommen.

    Besser wäre es, Du würdest mit einer Session arbeiten, die man auf drei veschiedene Arten installieren kann:

    • Cookies
    • Transiente Session IDs (an alle Request-URLs angehängt)
    • Basic Auth (dann musst Du den Sessionmechanismus selber starten)

    Harzliche Grüße vom Berg
    esst mehr http://www.harte-harzer.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau