setcookie

(PHP 3, PHP 4 )

setcookie -- Sendet ein Cookie

Beschreibung:

int setcookie ( string name, string value, int expire, string path, string domain, int secure [, string value [, int expire [, string path [, string domain [, int secure]]]]])

setcookie() definiert ein mit den Header-Informationen zu übertragendes Cookie. Cookies müssen vor irgendwelchen anderen Headern gesendet werden (dies ist eine Einschränkung der Cookies, nicht von PHP). Sie müssen deshalb solche Funktionsaufrufe vor irgendwelchen <html>- oder <head>-Tags im Skript einsetzen.

Alle Argumente - ausser name - sind optional. Ist nur der Name angegeben wird das Cookie mit diesem Namen auf dem Client gelöscht. Sie können beliebige Argumente auch durch einen Leerstring ("") ersetzen, um diese Argumente zu übergehen. Der expire-Parameter und das secure-Argument sind Integer-Werte und können nicht mit einem Leerstring übersprungen werden. Setzen sie statt dessen NULL (0). Der expire-Parameter ist ein normaler UNIX-Zeitwert als Integer-Zahl, wie er von der time() oder mktime()-Funktion zurück gegeben wird. Das secure-Argument bedeutet, dass das Cookie nur über eine sichere HTTP-Verbindung geschickt werden soll.

Anwendungsbereiche:

In PHP3 werden mehrfache Aufrufe von setcookie() im selben Skript in umgekehrter Reihenfolge abgearbeitet. Sollten sie also ein Cookie löschen wollen bevor sie ein anderes setzen, sollten sie das Setzen vor dem Löschen vornehmen. In PHP4 werden mehrfache Aufrufe von setcookie() in der Reihenfolge ihres Aufrufs behandelt.

Einige Beispiele, wie Cookies gesetzt / gesendet werden:

Beispiel 1. setcookie()-Beispiele:

setcookie ("TestCookie", "Test Value");
setcookie ("TestCookie", $value, time()+3600);  /* verfällt in 1 Stunde */
setcookie ("TestCookie", $value, time()+3600, "/~rasmus/", ".utoronto.ca",1);

Beispiele, wie die vorhergehenden Cookies wieder gelöscht werden:

Beispiel 2. setcookie()-Beispiele:

setcookie ("TestCookie");
// Setzen des Ablauf-Zeitpunktes auf 1 Stunde vorher
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca",1);
Beim Löschen eines Cookies sollten sie sicher stellen, dass die Verfallszeit in der Vergangenheit liegt, damit ihr Browser "zufrieden" ist.

Beachten sie, dass der Wertebereich des Cookies automatisch URL-konform codiert (urlencoded) wird, sobald sie das Cookie senden, und wenn es gelesen wird, wird es automatisch URL-konform decodiert und einer Variablen zugewiesen, die den selben Namen wie das Cookie trägt. Um die Inhalte unserer Test-Cookies zu sehen, brauchen sie nur eines der folgenden Beispiel zu benutzen:

echo $TestCookie;
echo $HTTP_COOKIE_VARS["TestCookie"];

Sie können auch ein Array an Cookies setzen, in dem sie die Array-Schreibweise benutzen. Dadurch werden so viele Cookies gesetzt, wie ihr Array Elemente hat. Sobald das Cookie aber von ihrem Skript gelesen wird, werden alle Werte in ein einziges Array mit dem Cookie-Namen eingelesen:

setcookie ("cookie[three]", "cookiethree");
setcookie ("cookie[two]", "cookietwo");
setcookie ("cookie[one]", "cookieone");
if (isset ($cookie)) {
    while (list ($name, $value) = each ($cookie)) {
        echo "$name == $value<br>\n";
    }
}

Weitere Informationen zu Cookies und deren Spezifikationen erhalten sie bei Netscape unter http://www.netscape.com/newsref/std/cookie_spec.html.

Microsofts Internet-Explorer 4 mit Servive-Pack 1 geht nicht korrekt mit Cookies um, die den Pfad-Parameter beinhalten.

Netscape Communicator 4.05 und Microsoft Internet Explorer 3.x scheinen mit Cookies Probleme zu haben, wenn die Argumente für Pfad und Zeit nicht angegeben sind.