Cookies mit Perl

Gelesen bei AboutWebDesign.de
URL: http://www.aboutwebdesign.de/awd/content/978832689.shtml

Einleitung

Cookies sind immer dann gefragt, wenn es darum geht, eine Information auf dem Browser Ihres Benutzers zu speichern (für nähere Informationen zu Cookies siehe Was sind Cookies?).

Gerade Script-Programmierer, die personalisierbare Anwendungen erstellen, machen Gebrauch von der Cookie-Technologie. Praktisches Beispiel: Sie wollen eine Anwendung erstellen, die es dem Benutzer erlaubt, sich das Design Ihrer Seiten selbst zusammenzustellen. Beim nächsten Besuch soll exakt die gleiche Design-Zusammenstellung angezeigt werden. Dafür müssen Sie auf dem Computer des Benutzers speichern, welches Design er sich ausgesucht hat - ein Fall für Cookies.

Glücklicherweise unterstützt das CGI-Modul den Umgang mit Cookies:

Speicherung

use CGI qw(:standard);

my $cookie = cookie (
-NAME => 'lay',
-VALUE => $lay,
-EXPIRES => '+10y',
-DOMAIN => '.aboutwebdesign.de'
);


Die Bedeutung Optionen -NAME und -VALUE sollte sich von selbst erschließen. Der bei -NAME angegebene Wert wird übrigens hinterher benötigt, um den bei -VALUE angegebenen String wieder auszulesen.

-EXPIRES legt fest, wie lange das Cookie gültig, also abrufbar, bleiben soll. Folgende Werte sind hier erlaubt:

+30s - 30 Sekunden
+10m - 10 Minuten
+1h - 1 Stunde
-1d - überhaupt nicht
now - überhaupt nicht
+3M - 3 Monate
+10y - 10 Jahre
Thursday, 27-Apr-2000 01:30:22 GMT - Beliebig festlegbar

Wobei letztere Angabe natürlich nur ein Beispiel ist..

Mit der Option -DOMAIN kann festgelegt werden, welche Server das Cookie abrufen dürfen. Wird diese Option weggelassen, kann nur der Server, der das Cookie gesetzt hat, das Cookie abrufen. Entscheidet man sich für den Einsatz dieser Option, muss man auf jeden Fall zwei Punkte einsetzen (überlicherweise einen vor dem Domainnamen und einen vor der Top-Level-Domain).

Vorläufiges Fazit: ein Cookie-Objekt ist in der $cookie-Variable gespeichert. Um das Cookie letztendlich an den Benutzer zu senden, verwenden Sie diesen Code:

print redirect(
-URL => "http://www.xyz.de/success.html",
-COOKIE => $cookie
);


Wichtig ist, dass Sie vorher keinen HTML-Header gesendet haben. Daher ist es auch unmöglich, gleichzeitig ein Cookie und eine normale HTML-Seite zu senden. Was jedoch möglich ist: erst das Cookie zu senden und dann den Benutzer auf eine normale HTML-Seite weiterzuleiten, wo ihn dann eine z.B. eine Bestätigungs-Meldung erwartet. Dazu dient der Parameter -URL.

Abruf

Der Abruf eines Cookies gestaltet sich wesentlich unkomplizierter:

use CGI qw(:standard);
my $wert = cookie("identifier");


Der Identifier muss dem Wert entsprechen, der beim Speichern dem -NAME-Parameter zugewiesen wurde.