Homepage-Webhilfe Event-Banner

Cookies

Cookies-Icon 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
Vorschau

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.

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK