Cookies | Nur Miete / Lizenz |
baseportal stellt Cookies ohne weiteres Zutun im Hash %_cookies bereit:
$_cookies{Name}
gibt den Wert des Cookies Name zurück.
Gesetzt werden Cookies durch den Befehl set_cookies:
Definition:
set_cookies "[*]Cookie-Name=Wert[; expires=rfc-date]", ...;
Beispiele:
set_cookies "Name=Hans", "Alter=27";
setzt das Cookie "Name" auf "Hans" und "Alter" auf "27".
Die Cookies haben eine unendliche Lebensdauer (Um genau zu sein: Bis zum Jahr 2030; falls sie nicht vorher gelöscht werden). Um ein Cookie nur solange zu speichern, solange der Nutzer den Browser geöffnet hat (=eine "Sitzung", engl. Session) muss man einen Stern vor den Cookie-Namen setzen:
set_cookies "*einkaufswagen=2472";
setzt das Cookie "einkaufswagen" auf "2472". Beim Schliessen des Browsers wird es automatisch gelöscht.
In ganz seltenen Fällen möchten Sie einem Cookie eine bestimmte Lebensdauer geben: Hierzu müssen Sie das Datum hintan stellen:
set_cookies "Sonderangebot_gekauft=0; expires=Mon, 24 Dec 2001 18:00:00 GMT";
setzt das Cookie "Sonderangebot_gekauft" auf "0". Ab dem 24.Dezember.2001 um 18:00 Uhr wird es automatisch vom Browser des Nutzers gelöscht. Das Datum muss in einem genau bestimmten Format vorliegen, sonst funktioniert es nicht. baseportal stellt dieses Format über die Datumsfunktion und den Formatnamen "rfc" bereit. Der obige Aufruf könnte also auch so aussehen:
set_cookies "Sonderangebot_gekauft=0; expires=".datum("24.12.2001,18:00","rfc");
baseportal wandelt das angegebene Datum automatisch in das richtige Format.
Neben der Lebensdauer können Cookies beliebige weitere Parameter mitgegeben werden. Wie beim obigen expires müssen diese mit Strickpunkt ; an die Cookie-Zuweisung angehängt werden. Um z.B. ein Cookie nicht nur bei der aufrufenden Seite verfügbar zu machen, benötigt man den Parameter "path":
set_cookies "Nutzer=hans; path=/";
Die genaue Bedeutung aller Parameter erfahren Sie in der RFC2965. (english)
Um ein Cookie zu löschen, muss einfach der Cookie-Name ohne Wert angegeben werden:
set_cookies "Besucher=";
löscht das Cookie "Besucher".
Das folgende Beispiel zeigt einen kleinen "Besucher-Zähler". Es erkennt, wenn ein Nutzer noch nie auf der Seite war und verlangt die Eingabe seines Namens. Dieser wird als Cookie auf seinem Rechner gespeichert, ebenso das Cookie "Besuche" das die Anzahl der Besuche mitzählt.
Um das Ganze zu testen kann man die Cookies auch wieder löschen lassen.
<perl> if($cmd eq "clear") { out "Cookies sind jetzt gelöscht..."; set_cookies "Name=", "Besuche="; out '<p><a href="baseportal.pl?htx='.$htx.'">Seite erneut aufrufen</a>'; } else { if($Name) { out "Willkommen $Name!"; set_cookies "Name=$Name", "*Besuche=1"; out '<p><a href="baseportal.pl?htx='.$htx.'">Seite erneut aufrufen</a>'; } elsif($_cookies{Name}) { $Besuche=$_cookies{Besuche}+1; out "Hallo $_cookies{Name}, dies ist Dein $Besuche. Besuch!"; set_cookies "*Besuche=$Besuche"; out '<p><a href="baseportal.pl?htx='.$htx.'">Seite erneut aufrufen</a>'; out ' - <a href="baseportal.pl?htx='.$htx.'&cmd=clear">Cookies löschen</a>'; } else { out <<EOF; Herzlich Willkommen! Dies ist Dein erster Besuch. Wie heisst Du?<p> <form action="baseportal.pl?htx=/$htx" method="post" enctype="multipart/form-data"> <input type="hidden" name="htx=" value="$htx"> Name: <input type="text" name="Name="> <input type="submit" value="Abschicken"> </form> EOF } } </perl>