Stahli: Cookiesetzung überprüfen

Hallo!
Ich möchte überprüfen, ob ein Browser Cookies aktiviert hat oder nicht. Ich weiß das es sich auch mit dem Rückgabewert von setcookie() überprüfen lässt, bevor ich das wußte hatte ich jedoch folgenden Ansatz.

  
setcookie('meincookie','meinwert',time()+600);  
if(isset($_COOKIE['meincookie']))  
  echo 'cookie aktiviert';  
else  
  echo 'cookie nicht aktiviert';  

Jedoch wurde immer ausgegeben, dass Cookies nicht aktiviert seien, unabhängig vom Browser. Nachdem ich die F5 Taste betätigt hatte wurde dann richtigerweise ausgegeben dass cookies aktiviert wären.
Weiß jemand woran es liegen könnte?
Wird die Superglobale $_COOKIE nicht von setcookie() "aktualisiert"?
Danke und schönen Tag noch.

--
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
René Descartes
  1. hi,

    Ich möchte überprüfen, ob ein Browser Cookies aktiviert hat oder nicht. Ich weiß das es sich auch mit dem Rückgabewert von setcookie() überprüfen lässt,

    Nein, das weißt du nicht, weil dem nicht so ist.
    PHP schickt den Cookie-Header nur zum Client - ob dieser dort auch akzeptiert wird, kann es beim Setzen des Cookies überhaupt nicht feststellen.

    setcookie('meincookie','meinwert',time()+600);
    if(isset($_COOKIE['meincookie']))
      echo 'cookie aktiviert';

    Jedoch wurde immer ausgegeben, dass Cookies nicht aktiviert seien, unabhängig vom Browser.

    Natürlich.
    Hättest du die Hinweise zu setcookie im Manual aufmerksam und mit Verstand gelesen, wüsstest du jetzt auch bereits, wieso.
    Hole das bitte nach.

    Nachdem ich die F5 Taste betätigt hatte wurde dann richtigerweise ausgegeben dass cookies aktiviert wären.
    Weiß jemand woran es liegen könnte?

    Ja - jeder, der sich informiert, bevor er fragt.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hi,

      Hättest du die Hinweise zu setcookie im Manual aufmerksam und mit Verstand gelesen, wüsstest du jetzt auch bereits, wieso.
      Hole das bitte nach.

      Tut mir leid, ich hatte die Lösung in einem PHP-Buch gelesen und dachte dass der Ansatz korrekt ist, die Umsetzung jedoch nicht.
      Entschuldigung und danke für die Tipps.

      Gruß Felix

      --
      Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
      René Descartes
  2. Hallo,

    Ich weiß das es sich auch mit dem Rückgabewert von setcookie() überprüfen lässt...

    das ist schon mal nicht korrekt. Die Rückgabe von setcookie() sagt nichts darüber aus, ob der Browser Cookies akzepiert. Sie gibt nur darüber auskunft, ob der entsprechende HTTP-Header des Response gesetzt werden konnte.
     Ein möglicher Fall, wo diese Funktion FALSE zurückgeben kann, tritt auf, wenn bereits eine Ausgabe des Inhalts vor setcookie() stattfand.

    Jedoch wurde immer ausgegeben, dass Cookies nicht aktiviert seien, unabhängig vom Browser. Nachdem ich die F5 Taste betätigt hatte wurde dann richtigerweise ausgegeben dass cookies aktiviert wären.

    In der Beschreibung der funktion setcookie() findet sich unter "Häufige Probleme:" gleich als erstes:

    Cookies werden nicht sichtbar, bevor nicht eine Seite geladen wird,
            für die das Cookie sichtbar sein soll. Um zu testen, ob ein Cookie
            erfolgreich gesetzt wurde, prüfen Sie noch vor der Ablaufzeit auf
            DER NÄCHSTEN GELADENEN SEITE[!], ob das Cookie vorhanden ist. ...

    Wenn in Deinem Script das Cookie gesetzt wird, wird gleichfalls auch der Inhalt des Scripts ausgeliefert. Jedoch werden Cookies nur bei einem Request gesendet und dieser erfolgte ja bereits. Also kann erst beim nächsten Request abgeprüft werden, ob der Browser ein Cookie sendet.

    Üblicherweise wird dies mit einer Weiterleitung verbunden:

    if(!$_GET['pruef']){ // noch kein Cookie gesetzt  
       setcookie('Kecks','Butter',time()+600);  
       if(substr(php_sapi_name(),0,3)!='cgi') // CGI-/Modul-Unterscheidung  
            header($_SERVER['SERVER_PROTOCOL'].' 307 Temporary Redirect');  
       else header('Status: 307');  
      
       // Erstellen des QueryStrings  
       $qs=($_SERVER["QUERY_STRING"]!=='' ? '&' : '?').'pruef=1';  
       // Umleitung auf selbes Script + $_GET['pruef']  
       header('Location: http://'.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"].$qs);  
    }  
    else echo 'cookie '.(isset($_COOKIE['Kecks']) ? '' : 'nicht ').'aktiviert';
    

    Gruß aus Berlin!
    eddi