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:
Cookies worden niet zichtbaar tot de volgende keer dat een pagina waarop het cookie zichtbaar is wordt geladen. Om te testen of een cookie succesvol is meegegeven, controleer dan voor cookies bij het laden van de pagina voor de cookie verloopt. De verlooptijd kan je instellen met de expire parameter.
Cookies moeten worden verwijderd met dezelfde parameters als waarmee ze werden ingesteld.
Cookie namen kunnen aangegeven zijn als array namen en zullen dan aanwezig zijn in je PHP scripts als array, maar worden bij de gebruiker als aparte cookies opgeslagen. Overweeg explode() of serialize() om één cookie te gebruiken die meerdere namen en waardes bevat.
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:
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:
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:
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"); |
Voor meer informatie over cookies, zie Netscape's cookie specificatie op http://wp.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.