PHP 4.3

9.8 Arrays speichern

Ebenso wie einfache Variablen, lassen sich Arrays in Cookies speichern. Dabei ist ein Cookie jedoch nicht in der Lage, ein gesamtes Array strukturell zu erfassen, denn pro Cookie kann nur ein Array-Element abgelegt werden.

Folgendes Skript veranschaulicht die Vorgehensweise. Für den Namen des Cookies verwenden Sie dabei die Schreibweise mit eckigen Klammern, wie Sie sie bereits von den Arrays kennen. Dabei handelt es sich zwar immer noch um eine Zeichenkette (auch wenn es wie eine Array-Indizierung erscheint), jedoch legt PHP beim Auslesen des Cookies beim erneuten Aufruf des Skriptes aufgrund der gewählten Schreibweise automatisch ein Array für Sie an.

Beispielskript Verfallsdatum
<?php

  $mein_array[0] = "Element 1";
  $mein_array[1] = "Element 2";
  $mein_array[2] = "Element 3";

  setcookie("array_cookie[0]", $mein_array[0], time()+3600, "/");
  setcookie("array_cookie[1]", $mein_array[1], time()+3600, "/");
  setcookie("array_cookie[2]", $mein_array[2], time()+3600, "/");

   foreach($HTTP_COOKIE_VARS["array_cookie"] as $wert) {
    echo $wert . "<br>";
  }

?>

Unberührt von dieser Möglichkeit der Notation bleibt der Umstand, dass Ihnen nur 20 Cookies je Domain zur Speicherung zur Verfügung stehen. Diese Einschränkung wirft natürlich Probleme auf, denn die zur Verfügung stehenden Ressourcen wären schnell belegt bzw. maximal 20 Array-Elemente auf diese Weise speicherbar.

Wir können uns aber zweier PHP-Funktionen aus der vorletzten Lerneinheit bedienen, die helfen, komplexe Datenmengen so abzulegen, dass Sie diese später wieder in Form eines Arrays abbilden können: implode() / join() und explode().

Zur Erinnerung: implode() bzw. join() fügt die Felder eines Arrays getrennt durch eine von Ihnen definierte Trenn-Zeichenkette zu einer Zeichenkette zusammen; explode() zerlegt die Zeichenkette wieder und gibt die Werte in Form eines einfachen Arrays zurück.

Im folgenden Beispiel verwenden wir als Trenn-Zeichenkette wieder die Zeichenfolge @/@. Achten Sie auch bei Cookies darauf, dass Benutzereingaben, wie schon in Lerneinheit 7 erläutert, trotz der geringen Wahrscheinlichkeit von Überschneidungen, auf ein Vorkommen der Trenn-Zeichenfolge geprüft werden sollten.

Beispielskript Schreiben komplexer Inhalte
<?php

  $obst[0] = "Kirschen";
  $obst[1] = "Melonen";
  $obst[2] = "Erdbeeren";
  $obst[3] = "Bananen";

  $string = implode("@/@", $obst);

  setcookie("obst_cookie", $string, 0);

  echo $HTTP_COOKIE_VARS["obst_cookie"];

?>

Denken Sie auch bei diesem Beispielskript daran, dass der erste Aufruf den Cookie im Browser speichert und daher erst der zweite Aufruf zu einer Ausgabe des Cookies führen kann.

Das Auslesen des Cookies und die Umwandlung in ein einfaches Array erfolgt auf diesem Weg:

Beispielskript Lesen komplexer Inhalte
<?php

  $obst = explode("@/@", $HTTP_COOKIE_VARS["obst_cookie"]);

  for($i = 0; $i < count($obst); $i++) {
    echo $obst[$i] . "<br>";
  }

?>

Natürlich hat auch diese Methode ihre Grenzen. Zum einen gilt noch immer die im zweiten Abschnitt beschriebene Größenbegrenzung von 4096 Bytes. Zum anderen haben Sie bei den Funktionen implode() / join() und explode() wenig Einfluss darauf, welche Daten zusammengefasst werden, da die Funktionen pauschal alle Arrayfelder einer Dimension einbeziehen.

Wir werden deshalb auf den nächsten Seiten zwei Skripte entwickeln, die gewissermaßen implode() und explode() nachbilden und zudem mehrdimensionale Arrays strukturiert in Cookies speichern können.

Kommentare (0)

Ihr Kommentar

Name