setcookie

(PHP 3, PHP 4 )

setcookie -- Poslat cookie

Popis

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

setcookie() definuje cookie, který se pošle spolu s hlavičkami. Cookies se musí odeslat jako první ze všech HTTP hlaviček (to je omezení cookies, ne PHP). Volání této funkce musíte tudíž umístit před <html> či <head> tagy.

Všechny argumenty kromě argumentu name jsou nepovinné. Pokud je přítomný pouze argument name, u klienta se smaže cookie tohoto jména. Kterýkoliv argument můžete také nahradit prázdným řetězcem (""), čímž tento argument přeskočíte. Argumenty expire a secure jsou celočíselné a nedají se přeskočit prázdným řetězcem. Místo toho použijte nulu (0). Argument expire je běžné Unixové celočíselné vyjádření času, jak je vrací funkce time() či mktime(). Argument secure indikuje, že by se tento cookie měl přenášet pouze po zabezpečeném HTTPS spojení.

Běžné zádrhele:

V PHP 3 se vícenásobná volání setcookie() v jednom skriptu provedou v opačném pořadí. Pokud se pokoušíte smazat jeden cookie pře odesláním jiného, měli byste umístit vložení před smazání. V PHP 4 se vícenásobná volání setcookie() provedou v tom pořadí, jak jsou volána.

Několik příkladů, jak posílat cookies:

Příklad 1. Ukázky odeslání cookies pomocí setcookie()

setcookie ("TestCookie", "Zkušební hodnota");
setcookie ("TestCookie", $value,time()+3600);  /* vyprší za hodinu */
setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1);

Následují příklady mazání cookies z předchozí ukázky:

Příklad 2. Ukázky mazání cookies pomocí setcookie()

setcookie ("TestCookie");
// nastaví dobu vypršení na čas před hodinou
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
Při mazání cookie byste se měli ujistit, že je doba vypršení v minulosti, čímž se v browseru zapne mechanismus odstranění cookie.

Všimněte si, že hodnotová část cookie se při odeslání cookie automaticky url-zakóduje, a při přijetí se automaticky dekóduje a přiřadí proměnné stejného jména, jako je jméno cookie. Pokud chcete vidět obsah našeho zkušebního cookie, použijte některý z následujících příkladů:

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

Cookies obsahující pole můžete také odeslat tak, že za název cookie napíšete hranaté závorky. Účinkem tohoto je odeslání tolika cookies, kolik má vaše pole prvků, ale když váš skript tyto cookies přijme, hodnoty se umístí v poli stejného jména, jako jsou vaše cookies:

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

Více informací o cookies viz specifikace cookies na http://www.netscape.com/newsref/std/cookie_spec.html.

Microsoft Internet Explorer 4 se Service Packem 1 zpracovává chybně cookies, které mají nastavený argument path.

Netscape Communicator 4.05 a Microsoft Internet Explorer 3.x zřejmě nezpracují cookies správně, pokud nejsou nastaveny argumenty path a time.