Entwickler-Ecke

Programmiersprachen (Server) - PHP - Cookies


Ccenter - So 01.04.12 14:04
Titel: PHP - Cookies
Moin,

versuche gerade ein Cookie per PHP zu erstellen aber ich bekomms nicht zum laufen. Kann mir bitte jemand mal sagen warum das nicht funktioniert?

Datei heißt index.php und liegt auf einem Server:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>

    <body>

       <?php
        setcookie("CookieTest", "Cookie-Wert123");
  
  $cookie = $_COOKIE["CookieTest"];
  echo "Der Inhalt des Cookies: $cookie";
       ?>
        
    </body>

</html>


Wenn ich die Seite aufrufe bekomme ich immer nur zu sehen:
"Der Inhalt des Cookies: ". Und wenn ich mir in den Browsereinstellungen die vorhandenen Cookies anzeigen lasse, ist meiner nicht dabei.
Ich habs bereits mit Firefox und Internet Explorer probiert.


Moderiert von user profile iconChristian S.: Topic aus Off Topic verschoben am So 15.07.2012 um 12:44


glotzer - So 01.04.12 14:32

das geht so nicht.
Erstmal werden Cookies im Header übertragen, was heißt es muss gesetzt werden BEVOR irgendetwas an Inhalt übertragen wird.
2. Kannst du das Cookie auch erst dann aufrufen wenn es gesetzt wurde -> beim 2. Aufruf oder mit Javascript.


Andreas L. - So 01.04.12 16:10

In der PHP Doku gibt es für viele Funktionen Beispiel-Code. Auch für setcookie. Ein Blick in die Manual lohnt sich immer:
http://www.php.net/manual/de/function.setcookie.php

Zitat:

setcookie() definiert ein mit den HTTP Header-Informationen zu übertragendes Cookie. Wie andere Header auch, müssen Cookies vor jeglicher Ausgabe Ihres Skriptes gesendet werden (dies ist eine Einschränkung des Protokolls). Das bedeutet, dass Sie diese Funktion aufrufen müssen, bevor Sie eine Ausgabe, dazu zählen auch <html>- oder <head>-Tags sowie jede Art von Whitespaces, übermitteln.

Sind die Cookies einmal gesetzt, können Sie beim nächsten Seitenaufruf anhand der $_COOKIE oder $HTTP_COOKIE_VARS Arrays auf diese zugreifen. Beachten Sie, dass die Superglobals wie $_COOKIE seit PHP 4.1.0 verfügbar sind. Die Cookie-Werte stehen auch in $_REQUEST.


Mit isset kannst du prüfen ob das Cookie bereits gesetzt wurde:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
<?php
  define('COOKIE_NAME''MY_COOKIE');

  if(isset($_COOKIE[COOKIE_NAME]) {
    // Cookie ist gesetzt -> Auslesen
  } else {
    // Cookie ist nicht gesetzt -> Cookie setzen
  }
?>

<html>
...


Ccenter - Di 03.04.12 13:34

Gut, Danke.
Der erste Fehler lag also darin, dass ich setcookie nicht im Header hatte. Der zweite Fehler ist, dass ich mir den Inhalt erst beim zweiten
Aufruf liefern lassen kann. In Ordnung, warum klappt das trotzdem nicht?


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
  
  <?php
  setcookie(”CookieTest”, “Cookie-Wert123”);
  ?>

    </head>
    <body>
       
        <?php
        $cookie = $_COOKIE["CookieTest"];
        echo "Der Inhalt des Cookies: $cookie";
        ?>
        
    </body>
</html>


Der Inhalt wird auch beim zweiten Aufruf nicht angezeigt.
Wenn ich mir im Firefox die vorhanden Cookies anzeigen lasse ist meiner wieder nicht dabei.


glotzer - Di 03.04.12 13:43

header = bevor IRGENDETWAS gesendet wird, unter "irgendetwas" zählt auch

Quelltext
1:
2:
3:
4:
5:
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>

genau das hat aber Andreas L. auch schon geschrieben.