Cookies
Cookies erlauben das seiten- und sessionübergreifende Speichern von Informationen. Cookies haben, so wie Formularfelder
auch, einen Namen und einen Wert. Dadurch, dass jedes Cookie einen Namen besitzt, ist es möglich, dass eine Webseite mehrere
Cookies (natürlich mit unterschiedlichen Namen) schreibt. Cookies werden vom Server geschrieben (HTTP-Headerfeld Set-Cookie
)
und vom Browser bei jedem Aufruf einer Seite der Website wieder an den Server geschickt (HTTP-Headerfeld Cookie
).
Die Speicherung der Cookies erfolgt durch den Browser. Cookies haben einen Gültigkeitsbereich in Form eines Pfades und
einer zeitlichen Begrenzung.
Um mit Cookies zu arbeiten, stellt uns das CGI
-Modul die Funktion cookie()
zur Verfügung. Um ein Cookie
zu schreiben, müssen Sie der Funktion eine Hash-Referenz mit den Elementen -name
(Cookie-Name) und -value
(Cookie-Wert) übergeben. Über den Elementnamen -expires
lässt sich zudem die Gültigkeitsdauer festlegen. Als Wert ist
eine absolute Zeitangabe (Ablaufzeitpunkt) oder ein zeitlicher Abstand (z. B. +1h
für 1 Stunde Gültigkeit) möglich. Wird
-expires
weggelassen, so besteht das Cookie bis zum Schließen des Browsers. Mit -path
lässt sich
der Gültigkeitsort festlegen, um so z. B. ein Cookie auf ein bestimmtes Verzeichnis (und dessen Unterverzeichnisse) zu beschränken.
Die Funktion cookie()
gibt eine Zeichenkette zurück, welche in das Headerfeld Set-Cookie
platziert werden
muss. Dies kann „manuell“ gemacht werden (siehe Beispiel) oder dem Element -cookie
der Funktion header()
übergeben werden.
Möchten Sie den Wert eines Cookies auslesen, so verwenden Sie ebenfalls die Funktion cookie()
. Dieser dürfen Sie
dann jedoch nur den Namen des Cookies oder eine Hash-Referenz, in welcher lediglich das -name
-Element vorkommt, übergeben.
Als Rückgabewert erhalten Sie dann den Wert des Cookies oder undef
, wenn das Cookie nicht gefunden werden konnte.
Im folgenden Beispiel werden die Formulareingaben für den Vornamen und Nachnamen in einem Cookie gespeichert, welches für 1 Stunde gültig ist:
#!/usr/bin/perl -w use strict; use CGI; my $cgi = new CGI(); # Parameter versuchen einzulesen my $vorname, my $nachname, my $cookieString = ''; if ($cgi->param('vorname') ne '' && $cgi->param('nachname') ne '') { # Parameter-Werte speichern $vorname = $cgi->param('vorname'); $nachname = $cgi->param('nachname'); # Cookies an Browser schicken $cookieString = 'Set-Cookie: '.$cgi->cookie({ -name => 'vorname', -value => $vorname, -expires => '+1h' })."\r\nSet-Cookie: ".$cgi->cookie({ -name => 'nachname', -value => $nachname, -expires => '+1h' })."\r\n"; } else { # Cookies versuchen auszulesen $vorname = $cgi->cookie('vorname') || ''; $nachname = $cgi->cookie('nachname') || ''; } print <<END; Content-Type: text/html;charset=UTF-8 $cookieString <!Doctype html> <html> <head> <title>Cookie - Perl Code-Beispiel</title> <meta charset="utf-8" /> <meta name="robots" content="noindex,nofollow" /> <meta name="publisher" content="Homepage-Webhilfe" /> </head> <body> <form action="cookie.pl" method="post"> <table> <tr> <td style="width: 100px;">Vorname:</td> <td><input type="text" name="vorname" value="$vorname" /></td> </tr> <tr> <td style="width: 100px;">Nachname:</td> <td><input type="text" name="nachname" value="$nachname" /></td> </tr> <tr> <td></td> <td><input type="submit" value="Cookie schreiben" /></td> </tr> </table> </form> </body> </html> END
Wichtig: Speichern Sie in Cookies niemals sicherheitsrelevante Daten, da Cookies ausgelesen und manipuliert werden können.
Übrigens: Um einem Cookie einen neuen Wert zuzuweisen, müssen Sie das Cookie einfach erneut (mit dem „neuen“ Wert) schreiben. Dadurch wird das Cookie vom Browser automatisch ersetzt.