Start > Informatik > PHP - Kurs > Cookies

Cookies


Sinn und Zweck

Kekse. Das ist die deutsche Übersetzung des Wortes Cookie. Tja so sind sie halt, die Informatiker. Die lassen sich für allen Scheiß einen lustigen Namen einfallen. Aber das gehört hier garnicht hin...
Holen wir ein wenig aus: Wenn der Server Daten an einen Client ausliefert (sei es nun direkt HTML oder aus einem PHP Script heraus) dann weiß er in der Regel nicht, wer da gerade eine Anfrage schickt.
Das ist so ähnlich wie die Telefonauskunft, der sagt man ja auch nicht den eigenen Namen sondern will eigentlich nur was von der Tussi, (oder Kerl)
Manchmal ist es aber notwendig, den "Anfrager" zu identifizieren oder sich ihn zumindest zu merken.
Dazu kann man mit Hilfe eines Cookies einen Kekskrümel auf dem Client hinterlassen und darin eine Information speichern. Diese Information aus dem Keks / Cookie wird jedesmal an den Server geschickt, daher kann der Server jetzt mit der Information vom Client etwas anfangen.

Beispiel

Jeder Webmail-Account ist einfach schweinefreundlich, da steht immer nach dem Einloggen:
    "Hallo XYZ wir begrüßen Sie wieder herzlich hier"

so oder so ähnliches Zeug kriegt man von der Maschine zu hören, aber woher weiß die eigentlich meinen Namen? Nun ja, dieser wird einfach gespeichert und zwar auf dem Rechner, von dem man die Website ansurvt.

Wie macht man das?

Nun das ist eigentlich ganz einfach man muss eine Datei beim Client erzeugen. Code-technisch ist das ganz total uninteressant, eine einfache Anweisung erzeugt ein neues Cookie:

    setcookie('user-id', 'Dieter');

mit Hilfe von setcookie wird ein Cookie erzeugt. Dieses Cookie hat dann den Namen 'user-id' und den Wert 'Dieter'.
Ein Cookie darf nur Zahlen oder Buchstaben oder eine Kombination der beiden enthalten.

Haltbarkeit von Keksen?

Kekse haben normalerweise die Haltbarkeit einer Browsersitzung. D.h. solange der User den Browser offen hat, existiert das Cookie. Macht er den Browser zu, dann werden alle Cookies gelöscht.
Aber irgendwie findet man doch auf seinem Rechner elend viele Cookies, wo kommen die denn her?
Ganz einfach, man sagt dem Cookie einfach:
    "He, ich will länger leben"

Fachsprachlich heißt dass dann die

"Lifetime" eines Cookies festlegen


    setcookie('enemy', 'mine', time()+60*60);

dann hält das Cookie 60*60 sec = 3600 Sekunden = 1 Stunde. Gerechnet ab Erzeungsdatum.

Ein Cookie kann man auch explizit löschen
Ich weiß zwar nicht warum man das tun sollte, es löst sich ja quasi eh von selbst auf, aber wenn man den wert auf '' setzt, dann ist der Keks weg:

    setcookie('enemy', '');

Code Sample:

    <?php
    setcookie('user-id','Dieter');
    setcookie('enemy','mine',time()+60*60);
    setcookie('Hello','World');

    ... // jetzt Website ausliefern.

    ?>

WICHTIG WICHTIG WICHTIG WICHTIG

setcookie() muss vor jeder Auslieferung von HTML an den Webserver stehen.

Tolles Cookie und jetzt?
Problem:
Wir können ein Cookie setzen, aber wie kriegen wir wieder raus, was wir da reingeschrieben haben?
Dafür gibt es das:

autoglobale Array $_COOKIE

Dieses assoziative Array enthält alle Cookies, die auf dem entsprechenden Client gesetzt worden sind.
Jetzt kann man mit diesem Array die Daten auswerten:

    $_COOKIE['Cookie-Name']

Wichtiger Hinweis: Man kann natürlich über das Array NIEMALS den Wert eines Cookies ändern. Das geht nur mit setcookie()!

Wie wir sehen ist ein Cookie zu erzeugen garnicht so schwierig. Ein

Vollständiges Beispiel:


    <?php
    setcookie('user-id','Dieter');
    setcookie('enemy','mine',time()+60*60);
    setcookie('Hello','World');

    ... // jetzt Website ausliefern.

    print('Yes, u r my best friend ".$_COOKIE['user-id'];

    print('and it is nice to live on this '.$_COOKIE['hello'].', dont u believe?');

    ?>

Warum muss setcookie am Anfang stehen?

Ganz einfach, damit ein Cookie erzeugt werden kann, wird dem Client im HTML-Header ein bestimmter Steuerungscode übermittelt.
Wenn ich jetzt mit print direkt eine HTML-Ausgabe bzw. überhaupt eine Ausgabe auf dem Client erzeuge, dann kann der Webserver keinen Steuerungscode schicken.
Warum? Du Depp:
Sag mal folgendes zu deiner Freundin / Freund:

    "He, ich mach Schluss, hau ab"

wenn sie/er dann gegangen ist (also richtig aus der Tür raus), dann ruf folgendes hinterher:

    "war nur Spass"

Kapiert? Die Reihenfolge spielt halt manchmal eine Rolle, bei Cookies muss zuerst den Steuerungscode schicken, nachher geht das nicht mehr.
Warum? <grmpf> Frag die vom W3C, die haben sich das ausgedacht.

Infoblätter und Arbeitsblätter Paragraph

noch keine verfügbar
Ticker
Last update:
October 08. 2018 08:46:35