setcookie

(PHP 3, PHP 4 )

setcookie -- Verstuur een cookie

Beschrijving

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

setcookie() defineert een cookie dat wordt meegezonden met de rest van de header informatie. Zoals elke header moeten cookies verzonden worden voordat er output verzonden wordt vanuit je script (dit is een restrictie van het protocol). Daarom moet je deze functie aanroepen voor enige output, zoals <html> of <head> tags en whitespace. Als er toch output wordt doorgegeven voor het aanroepen van deze functie, dan zal setcookie() falen en FALSE terug geven. Als alles goed is gegaan, geeft hij TRUE terug. Dit wil echter niet zeggen dat de gebruiker het cookie geaccepteerd heeft.

Alle argumenten behalve de name parameter zijn optioneel. Als alleen het name argument aanwezig is, wordt het cookie met die naam verwijderd van de remote client. Je mag een willekeurig argument ook vervangen door een lege string ("") om dat argument over te slaan. De expire en secure argumenten zijn integers en kunnen niet worden overgeslagen met een lege string. Gebruik in plaats daarvan een nul (0). De expire parameter is een normaal Unix tijds integer zoals wordt teruggegeven door de time() of mktime() functies. De secure geeft aan dat het cookie alleen mag worden verzonden over een veilige HTTPS verbinding.

Wanneer cookies eenmaal zijn ingesteld, kunnen ze worden opgeroepen op de volgende pagina met de $_COOKIE of $HTTP_COOKIE_VARS array. Let op dat autoglobals zoals $_COOKIE vanaf PHP 4.1.0 pas aanwezig zijn. $HTTP_COOKIE_VARS bestaat al vanaf PHP 3.

Veel voorkomende fouten:

In PHP 3 worden meerdere aanroepen van setcookie() in hetzelfde script verwerkt in omgekeerde volgorde. Als je probeert een cookie te verwijderen voordat je een nieuwe neerzet, moet je het toevoegen doen voor het verwijderen. In PHP 4 worden meerdere aanroepen van setcookie() verwerkt in de volgorde waarop ze worden aangeroepen.

Een paar voorbeelden volgen over hoe je cookies moet verzenden:

Voorbeeld 1. setcookie() stuur voorbeelden

setcookie ("TestCookie", $value);
setcookie ("TestCookie", $value,time()+3600);  /* verloopt in 1 uur */
setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1);

Wanneer je een cookie verwijdert moet je zorgen dat de expiratie datum in het verleden is, om het verwijder mechanisme in je browser te activeren. Er volgen voorbeelden hoe je in het vorige voorbeeld verzonden cookies kunt verwijderen:

Voorbeeld 2. setcookie() verwijder voorbeelden

// zet de verlooptijd naar 1 uur in het verleden
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);

Let er op dat het waarde deel van het cookie automatisch wordt ge-urlencoded wanneer je het cookie verzendt, en wanneer het wordt ontvangen, wordt het automatisch gedecodeerd en toegewezen aan een variabele met dezelfde naam als de cookie naam. Om de inhoud van ons test cookie in een script te zien, kun je simpelweg een van de volgende voorbeelden gebruiken:

echo $TestCookie;
echo $_COOKIE["TestCookie"];

Je kunt ook array cookies zetten door array notatie in de cookie naam te gebruiken. Dit heeft het effect dat er evenveel cookies worden neergezet als je array elements hebt, maar als het cookie wordt ontvangen door je script worden de waarden allemaal geplaatst in een array met de naam van het cookie:

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";
    }
}

Voor meer informatie over cookies, zie Netscape's cookie specificatie op http://www.netscape.com/newsref/std/cookie_spec.html.

Microsoft Internet Explorer 4 met Service Pack 1 werkt niet goed met cookies die hun path parameter hebben ingesteld.

Netscape Communicator 4.05 en Microsoft Internet Explorer 3.x lijken cookies incorrect af te handelen wanneer het pad en de tijd niet zijn ingesteld.