Autor Zpráva
susenka
Profil *
Ahoj,
chci uložit cookie (při vložení prvního zboží do košíku), používám k tomu tento kód
setcookie("kosik", "$token:$hash_ip", strtotime("+30 minutes"));    

Na localhostu se mi cookie ukládá, na webu nikoliv. Přitom na tom samém webu se mi ukládá cookie při přihlašování, pro porovnání:
setcookie("login", "$_SESSION[user_name]:$token:$hash_ip", strtotime("+1 month"));

Nevíte někdo, proč se mi cookie s názvem kosik neukládá?
Děkuju
Jan Tvrdík
Profil
susenka:
V prvé řadě – máš nějaký důvod, proč to neřešit přes session? Teď k tomu vlastnímu problému s cookies – ideální je začít prohlídkou HTTP požadavků mezi prohlížečem a serverem (jsou vidět ve vývojářských nástrojích v prohlížečích) a sledovat, která strana udělá první chybu.


Dovolím si ještě pár připomínek nesouvisejících s popsaným problémem:
1) ad $hash_ip – Na IP adrese není dobré moc záviset, protože mezi jednotlivými požadavky se může změnit. Nejběžnější případ je, když se na web někdo připojí z mobilního telefonu. Popojde pár metrů a má jinou IP adresu.
2) ad $_SESSION[user_name] – Máš garantováno, že se tam nikdy neobjeví dvojtečka?
susenka
Profil *
Zkoušela jsem Firebug - síť > HTML > Hlavičky a chybí Set-Cookie v Hlavičkách odezvy.
Jan Tvrdík
Profil
susenka:
Není možné, že to volání setcookie na ostrém serveru skončí chybou, o které nevíš, protože na serveru není povoleno vypisování chyb? Jakou má volání setcookie návratovou hodnotu? Neposíláš před tím nějaký výstup?
susenka
Profil *
setcookie mi navrátí false. Před tím - odešle se formulář (post), zjistí se, zda cookie již existuje, pokud ne, má vytvořut novou.
susenka
Profil *
Už jsem na to přišla - je to jak psal Jan. Takže stačilo posunout ten kus kódu na začátek...
z php.net:
setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including <html> and <head> tags as well as any whitespace.

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: