Autor Zpráva
nethor
Profil
Stala se mi taková věc.
V e-shopech většinou zboží v nákupním košíku zapisuji do session, léta to funguje, bez problémů.
V jednom e-shopu ale potřebovali, aby zboží zůstalo v košíku delší dobu, třeba několik dní a i když zákazník resne PC.
Stav košíku jsem tedy předělal, aby se ukládal do cookies. (Ukládám Id zboží a množsví). Vše fungovalo skvěle, dokud objednávka nepřesáhla asi 150 položek.
Pak se začala zobrazovat pouze prázdná stránka, jako by server nevrátil vůbec nic.
Už tuším, jak tenhle problém řešit. (Objednávané zboží uložit do databáze a do cookies pouze identifikátor.)
Ale zajímá mě, co se to vlastně děje, proč při překročení množství/velikosti cookies přijde prakticky okamžitě prázdná odpověď...
RastyAmateur
Profil
nethor:
Napadá mě to, že nedostaneš prázdnou odpověď, ale nějaký error. Ovšem na produkčním serveru máš určitě errory vypnuté, tudíž se zobrazí jen prázdná stránka
Kajman
Profil
Podíval bych se do logů, zda ten požadavek vůbec k webovému serveru přišel a zda tam není u něho vypsaná chyba.
nethor
Profil
Nepsalo to nic, ikdyž jsem zapnul ini_set('error_reporting', E_ALL);
Error log, do kterého se na hostingu dostanu je prázdný a z access logu jsem nic nevyčetl. (ale možná jen nevím, co hledat)

Napsal jsem si ale zkušební script, a když jsem nechal uložit asi 200 cookies, vrátěla se mi hláška:

Err 400
Bad Request
Your browser sent a request that this server could not understand.
Size of a request header field exceeds server limit.

To by dávalo smysl, hlavička je asi moc dlouhá. Chybu vyhodí Apache a na PHP ani nedojde...
Keeehi
Profil
nethor:
Typická maximální velikost cookie je kolem 4000 bajtů. Při 150 položkách to vychází kolem 26 bajtů na položku. Pokud je položka reprezentovaná jen číselným ID, tak by se tam mohla vejít. Pokud tam máš ale i nějaké další informace (jako že by to dávalo smysl) tak pak je dost možné že je tato velikost překročena.

ikdyž jsem zapnul ini_set('error_reporting', E_ALL);
Vypisování chyb ještě závisí na hodnotě display_errors.
nethor
Profil
Košík každopádně musím předelat a psát do databáze, některé objednávky mají až 400 položek..
Jen mě zajímalo, čím je chyba způsobená, abych se jí příště vyhnul.
Tedy vyřešeno. Díky všem.
Bubák
Profil
nethor:
Košík každopádně musím předelat a psát do databáze
Anebo do Local Storage. Ale mám dojem, že v tomto případě opravdu bude výhodnější mít obsah košíku v databázi.
Keeehi
Profil
Tak ona výhoda toho uložení v databázi je také ta, že člověk si může pak udělat objednávku na jednom zařízení a dokončit ji na jiném.

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