Anzeige
Tutorialbeschreibung

PHP - Teil 17 - Von Keksen und Cookies

PHP - Teil 17 - Von Keksen und Cookies

Jeder hat wohl schon mal von ihnen gehört: Cookies. Diese kleinen Textzeilen helfen dabei, Daten während einer Abfolge von Aufrufen einer Webseite festzuhalten. Viele Entwickler kennen Cookies nur im Zusammenhang mit JavaScript. Dabei bietet auch PHP hinsichtlich der Cookies zahlreiche Möglichkeiten. Welche das sind, wird in diesem Video-Training gezeigt.

Icon-Ersteller: Oxygen-Team

... übrigens findest du die komplette Serie hier: PHP-Workshop-DVD - Basics & Tricks - Schnapp sie dir in unserem Shop oder in der Kreativ-Flatrate!


Um es vorwegzunehmen: Jeder Browser bzw. jeder Anwender entscheidet selbst, wie lange und ob Cookies gespeichert werden dürfen. Wenn ihr also ein PHP-Skript schreibt, das beim Anwender einen Cookie speichern soll, könnt ihr nicht sicher sein, dass dieser Cookie dort auch tatsächlich gespeichert wird.

So findet man im Google Chrome die relevanten Einstellungen beispielsweise im Werkzeugschlüssel-Menü unter Optionen>Details>Content-Einstellungen im Bereich Cookies.

Bilder



 
Dort kann man das Verhalten des Browsers hinsichtlich der Cookies festlegen. Andere Browser halten ähnliche Funktionen bereit. Für euch als Entwickler bedeutet dies also Folgendes: Ihr könnt euch nicht darauf verlassen, dass die Cookies beim Anwender tatsächlich gespeichert werden.

Dennoch haben Cookies große Vorteile. Schließlich kann man diese nutzen, um das Angebot einer Webseite bis zu einem gewissen Grad zu personalisieren.

Hier die Kerndaten von Cookies:

• Die Cookie-Größe ist auf maximal 4 KB begrenzt.
• Browser speichern maximal 300 Cookies.

Das soll es an dieser Stelle an allgemeinen Informationen über Cookies gewesen sein. Jetzt geht es mit der PHP-Cookie-Kombination weiter. Wer sich darüber hinaus über Cookies informieren möchte, wird auf der Seite http://www.netplanet.org/www/cookies.shtml fündig.


 

Cookies setzen

In PHP gibt es zum Anlegen eines Cookies die Funktion setcookie().

Bilder



Diese Funktion ergänzt die Header-Angaben. Cookies können also nur gesendet werden, wenn vor dieser Definition keine andere Angabe wie echo o.Ä. steht.


 
Im einfachsten Fall besitzt die setcookie()-Funktion zwei Parameter.

<?php
 setcookie("username","michael");
?>


Der erste Parameter ist der Name des Cookies. Im zweiten Parameter ist dessen Wert hinterlegt. Solch ein Cookie wird so lange beim Client gespeichert, bis der Browser geschlossen wird. (Wobei auch hier natürlich die genannten Einschränkungen hinsichtlich der möglichen Benutzereinstellungen gelten).

Bilder



 
Ebenso lässt sich explizit die Läge der Haltbarkeit des Cookies festlegen. Verwendet wird dafür der optionale dritte Parameter. Soll der Cookie beispielsweise einen Tag lang gültig sein, sähe das folgendermaßen aus:

<?php
 setcookie("username","michael",time()+(3600*24));
?>


Bei der Zeitangabe handelt es sich um einen Unix-Zeitstempel beginnend am 1.1.1970. Normalerweise verwendet man diesen Zeitstempel mittels der Funktion time() plus der Anzahl der Sekunden, die bis zum Ablauf des Cookies vergehen sollen.

Soll der Cookie also beispielsweise in einer Minute ablaufen, müsste die Definition so aussehen:

<?php
 setcookie("username","michael",time()+(60));
?>


Dieser Zeitaspekt ist es übrigens, der euch auch im Zusammenhang mit dem expliziten Löschen von Cookies wieder begegnen wird. Dazu dann aber am Ende dieses Tutorials mehr.


 

Cookies auslesen

Nun ist das Setzen des Cookies natürlich nur der erste Schritt. Um einen wirklichen Nutzen aus einem Cookie ziehen zu können, muss man diesen natürlich auch auslesen können.

Cookies, die der Client zum Browser schickt, werden im Array $_COOKIE gespeichert. Dabei ist der Schlüssel des Arrays der Cookie-Name. Der Wert des Array-Elements ist der Wert des Cookies. Angenommen also, es gibt folgende Cookie-Definition:

<?php
 setcookie("username","michael");
?>


Daraus wird dann Folgendes:

$_COOKIE["username"] = "michael"


Das folgende Beispiel zeigt, wie der bereits bekannte Cookie bzw. dessen Wert ausgelesen werden kann.

<?php
 $cookie = $_COOKIE["username"];
 echo "Das ist der Cookie-Inhalt: $cookie";
?>


 
Im Browser sieht das folgendermaßen aus:

Bilder



 
Cookies können nur ausgelesen werden, wenn diese vom Browser tatsächlich gesendet werden. Ein Cookie ist also nicht direkt im Array $_COOKIE enthalten, nachdem die setcookie()-Funktion aufgerufen wurde. Auch dazu wieder ein Beispiel:

<?php
 setcookie("username3", "Michael");
 echo $_COOKIE["username3"]; 
?>


Ruft man dieses Skript im Browser auf, ergibt sich folgendes Bild:

Bilder



Wie ihr seht, gibt es hier einen Warnhinweis. (Der verschwindet übrigens, wenn man die Seite aktualisiert). Eine Ausnahme wäre es lediglich, wenn bereits zuvor ein Cookie mit dem Namen username3 angelegt worden wäre. Durch den Aufruf von setcookie() wird die Aufforderung zum Speichern des Cookies gesendet. Aus diesem Grund kann das $_COOKIE-Array nicht unmittelbar mit diesem Cookie gefüllt sein.

 
Um Fehler zu vermeiden, sollte unbedingt überprüft werden, ob tatsächlich ein Cookie gesendet wurde. Verwendet wird dafür die Funktion isset(). Das folgende Beispiel zeigt eine Anwendung, bei der diese Funktion eingesetzt wird.

Zunächst wird ein einfaches HTML-Formular definiert.

<form action="cookie2.php" method="post">
 Dein Name:
 <input type="text" name="name" />
 <input type="submit" value="Weiter" />
</form>


Dieses Formular enthält an relevanten Dingen ein Eingabefeld und eine Submit-Schaltfläche. Wird diese Schaltfläche angeklickt, ruft das die Seite cookie2.php auf. Diese Datei sieht nun wiederum folgendermaßen aus:

<?php
  if(isset($_POST["name"]) && ! empty($_POST["name"])){
    setCookie("name",$_POST["name"],time()+(2592000));
  }
?>


Diese Datei macht nichts anderes, als den im Formular in das Eingabefeld eingetragenen Namen in einem Cookie zu speichern. Dabei soll der Cookie ca. einen Monat lang gespeichert werden. Was hat man nun aber davon, wenn man einen Cookie so lange speichert?

 
Jetzt kommt ein weiteres PHP-Skript ins Spiel. Dieses Skript liest den im Cookie gespeicherten Wert – also den Namen – aus und begrüßt den Besucher einen Monat lang persönlich mit seinem Namen.

Bilder



 
Das Skript sieht folgendermaßen aus:

<?php
  if(isset($_COOKIE["name"])){
    echo "Hallo ".htmlspecialchars($_COOKIE["name"]).", Willkommen zurück!";
  }
?>


Das ist praktisch, schließlich lässt sich auf diese Weise durchaus eine gewisse Personalisierung der Webseite erreichen.


Cookies löschen

PHP stellt zum Löschen von Cookies keine spezielle Funktion zur Verfügung. Mit einem kleinen Trick lassen sich Cookies aber explizit löschen. Verwendet wird dafür die Funktion setcookie(), über die Cookies bekanntermaßen gesetzt werden. Um nun einen Cookie zu löschen, setzt man das Haltbarkeitsdatum – also den Wert des dritten Parameters – auf einen Zeitpunkt in der Vergangenheit. Vorsichtshalber sollte der Wert des Cookies zusätzlich ungültig gemacht werden. Das macht man üblicherweise mit einem leeren String.

<?php
 setcookie("username", "", time()-60*60*24);
?>



 

Fragen der Sicherheit

Hinsichtlich der Cookies kommt immer wieder die – übrigens nicht unberechtigte – Frage nach der Sicherheit auf. Ganz wichtig ist hier ein Punkt: Vertraut in euren Skripten niemals Cookies, die von außen kommen. Zudem sollte niemals darauf vertraut werden, dass die Cookies gültige Werte besitzen. Sollte ein Cookie also als Wert eine Zahl haben, sollte das auch dementsprechend geprüft werden.


Fazit

Cookies stellen durchaus ein probates Mittel dar, um beispielsweise Webseiten bis zu einem gewissen Grad zu personalisieren. Dabei darf allerdings eines nicht vergessen werden: Hat ein Anwender Cookies in seinem Browser deaktiviert, funktioniert das nicht mehr. Man sollte also immer auch dafür sorgen, dass die Webseite auch in einem solchen Fall funktioniert.

DVD-Werbung
Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von franzg
  • 15.05.2017 - 00:02

Sehr interessantes und informatives Tutorial! Danke sehr!

Portrait von kleckser*1
  • 07.10.2016 - 12:57

Danke für das Tutorial.

Portrait von dmtw2107
  • 16.11.2013 - 09:40

verständlich und toll erklärt danke für das tutorial

Portrait von xfighter
  • 12.12.2011 - 13:39

Ein sehr gutes Tutorial, das mir als kompletten Einsteiger eine guten Überblick über den Zugriff auf Cookies mit php gibt.

x
×
×