Autor Zpráva
Hitman
Profil
Dobrý den,

řeším problém s cookies, zjišťuji zda již existuje, pokud ne - vytvářím. Poté na základě cookie ukládám záznam do db, řekněme že jde o košík, je to podobný princip. Pokud uživatel vyprázdní košík, vymažu záznam z DB a smažu cookii. Nicméně jsem zjistil že se mi každá druhá cookie nestihne načíst. Jednoduše řečeno na jednom řádku ji vytvářím, na druhém už ji chci číst a jednou se obsah načte dobře, jednou je prázdný. To nějakou dobu trvá než se cookie uloží? Lze to nějak ošetřit, aby program nepokračoval, dokud se cookie neuloží?

Zkusil jsem si taky napsat jednoduchý script a měl jsem za to že mi z principu vždy hodnotu vypíše, ale nestalo se tak, takže asi opravdu nějakou dobu trvá než se vytvoří a nelze ji hned číst.

$obsah = '';

SetCookie ("mojeSusenka", 'hodnota');                        
    
$obsah = $_COOKIE["mojeSusenka"];

SetCookie ('mojeSusenka', null, time() - 1, '');
   
echo $obsah;
Kajman
Profil
V php SetCookie řekně prohlížeči, co má poslat při dalším požadavku. V nynějšího spuštění se ještě chtěná hodnota v $_COOKIE nenachází.

V klientském javascriptu by takováto posloupnost ukládání a čtení cookies fungovala, protože běží v prohlížeči.

V php by tomu přístupu byla blízká session proměnná.
T-fon
Profil
Jen uložíš a přečteš:
setcookie('mojeSusenka', null, time() - 1, '');
echo $_COOKIE["mojeSusenka"];
Edit: teď když čtu Kajmanovu odpověď, tak asi tohle můžeš ignorovat :)
Hitman
Profil
Při dalším požadavku to znamená po provedení celého scriptu? Nebo co myslíš tím "další požadavek"? Zajímavé je že někdy to takto funguje a někdy ne...

Každopándě aby mi fungoval ten script výše (pro ilustraci), nejlepší postup bude uložit si ukládanou hodnotu do cookie do proměnné a s cookie v tomto průchodu scriptu nepracovat, je to tak?
pcmanik
Profil
Hitman:
Prečítaj si prosím dokumentáciu je to tam jasne popísané v prvých dvoch odstavcoch.

Zajímavé je že někdy to takto funguje a někdy ne...
Fungovať to môže jedine ak už tá cookie bola vytvorená pred spustením toho skriptu. Inak povedané nachádza sa v HTTP hlavičke requestu od užívateľa.

Čo ti bráni použiť Session namiesto Cookie?
Radek9
Profil
Hitman:
Zkusím to vysvětlit ještě polopatě:

- Volání funkce setcookie způsobí, že se při požadavku č. 1 (když si otevře tvoji stránku) uživateli vrátí HTTP hlavička, která mu říká, aby si uložil cookie s nějakým názvem a s nějakou hodnotou.
- Zároveň v tomto požadavku (č. 1) posílá uživatel na server všechny cookies, které měl doposud uložené. Pokud tedy nějakou z nich měníš, tak z tvého pohledu obsah proměnné $_COOKIE bude zastaralý. (Jinými slovy, pokud měl uživatel v cookie a uloženo 1 a ty nastavuješ hodnotu na 2, tak v $_COOKIE['a'] bude 1, protože to je to, co on poslal tobě na server.)
- Po skončení požadavku č. 1 si uživatel uloží novou hodnotu cookie.
- Pokud si nyní otevře stránku znovu (požadavek č. 2), tak v $_COOKIE['a'] bude již hodnota 2.
- Pokud opět v požadavku č. 2 pomocí setcookie nastavíš hodnotu na 2, může se z tvého pohledu zdát, že se to rovnou promítlo i do $_COOKIE. Je to však jen kvůli tomu, že shodou okolností tam už tahle hodnota byla.

Pokud tedy chceš v $_COOKIE aktuální hodnoty, musíš je tam po volání setcookie ještě manuálně uložit:
setcookie('a', '2');
$_COOKIE['a'] = '2';

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0