Autor Zpráva
MSTRmt
Profil
Cookies jsou proměnné, uložené na straně klienta, jenž se předají v hlavičkách prohlížeče tehdy, kdy uživatel otevírá server, které toto Cookie vytvořil. Cookies vytvoříme funkcí setcookie(). Syntaxe:
<?php
  setcookie(string $name, string $value[, int $expire[, string $path[, string $domain[, bool $secure]]]])
?>
První parametr name udává název nového Cookie, druhý parametr value hodnotu Cookie, nepovinný parametr expire udává čas vypršení Cookie v UNIX formátu (Při neuvedeném zápisu se vytvoří Cookie, které se vymaže po zavření prohlížeče). Parametr path udává umístění adresáře na serveru ze kterého bude toto Cookie čitelné (Při vynechaném údaji se použije zápis "/", Cookie je čitelné po celém serveru). Parametr domain uvádí adresu serveru, kde bude možno toto Cookie číst (Při chybějícím zápisu se použije doména na kterém je spuštěn script). Poslední parametr secure udává zda se má Cookie přenášet přes protokol https (Jindy je to false).
Příklad:
<?php
  if(setcookie("Moje cookie", "Hodnota", time()+60*60*24))
    echo "Cookie bylo vytvořeno.";
?>
Vytvoří se Cookie s názvem Moje cookie a hodnotou Hodnota, které za den vyprší. Funkce time() slouží k určení aktuálního času
v UNIX formátu. K tomuto času se přičte 24*60*60 sekund (24 hodin). Když je uložených 301 Cookies, nejstarší Cookie se vymaže, takže toto Cookie nemusí vydržet celý den. Také se někteří uživatelé bojí Cookies a proto mají zakázané jejich ukládání.
Cookie se mění stejně jako se vytváří, když chtějí údaj změnit vytvoří Cookie se stejným jménem a jinými vlastnostmi. Při změně času na aktuální čas nebo minůlý čas se Cookie vymaže.
Příklad:
  <?php
    if(setcookie("Moje cookie", "Vymazáno", time()))
      echo "Cookie bylo vymazáno.";
  ?>
Cookie se čte pomocí superglogalní proměnné $_COOKIE[]. Dříve se pro čtení Cookies používalo $HTTP_COOKIE_VARS[], dnes to pořád funguje, ale lepší je používat $_COOKIE[].
Příklad:
  <?php
     echo "Hodnota cookie je: " . $_COOKIE['Moje cookie']; //Vypíše Hodnotu cookie se jménem Moje cookie
  ?>
Nevýhodou používání Cookie je, že je může zkušený uživatel kdykoliv změnit (Hodnoty Cookies jsou často v souborech Cookies zakódovány), takže je nevhodné je používat pro login, v tomto případě se používá Session.
tiso
Profil
MSTRmt: setcookie má 7 parametrov
Martin2
Profil *
MSTRmt:
Parametr path … (Při vynechaném údaji se použije zápis "/"
Není pravda. Výchozí je aktuální adresář.

$HTTP_COOKIE_VARS[], dnes to pořád funguje, ale lepší je používat $_COOKIE[].
Taky není pravda. Direktiva register_long_arrays byla již odstraněna. Tuším ve verzi 5.4
Dusann
Profil
Mám dotaz:

Cez setcookie() sa posiela cookie s atribútom Expires ktorý vychádza z času servera. Ak je rozdiel medzi časom serveru a časom uživateľového PC, tak môže nastať problém nie ?

Napríklad čas serveru je 19:20, čas na klientovom PC je 19:45, tak cookie s platnosťou 20min bude u klienta už okamžite po prijatí neplatné.

Ak ale odošleme cookie s atribútom Max-Age, tak 20min by sa malo pripočítať k času kedy klientov browser cookie prijal.

Z tohto dôvodu sa mi nejaví výhodné používať setcookie(), ale rovno header() kde je možné cookie odoslať s atribútom Max-Age, ideálne ale s Max-Age + Expires kôli kompatibilite s IE, ktorý vraj Max-Age nepodporuje.

K setcookie() ešte doplním - ak sa pre parameter value použije prázdny string alebo boolean false, PHP odošle vždy neplatné cookie, nezávisle na parametri expire.
Martin2
Profil *
Dusann:
Cez setcookie() sa posiela cookie s atribútom Expires
Od verze 5.5 používá PHP oba parametry. Expires i Max-Age.

Napríklad čas serveru je 19:20, čas na klientovom PC je 19:45
V praxi dost nepravděpodobné. Chyby času klientů jsou v řádu setin sekund, ne desítek minut. Řešíš neexistující problém.

Vaše odpověď

Mohlo by se hodit

Ostrá verze učebnice běží na www.pehapko.cz.

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: