Ukládání dat do cookie

Školení, která pořádám

Na mobilním telefonu se běžně stává, že vypadne připojení k Internetu, a při ukládání dat na server bychom s tím měli počítat. Pokud data ukládáme běžným formulářem obnovujícím stránku, tak by se o to měl postarat prohlížeč – zobrazí informaci o nedostupnosti připojení a při jejím obnovení se data pošlou znovu. Pokud ale data odesíláme AJAXem, tak se o to musíme postarat sami.

Možné řešení spočívá v tom, že si data na klientu uložíme do cookie, která se při dalším úspěšném požadavku automaticky pošle na server. S knihovnou js-cookie můžeme cookie nastavit pomocí Cookies.set('save', data). Po uložení dat v cookie ji na straně serveru smažeme: setcookie("save", ""). Do cookie lze typicky uložit jen 4 KB dat, takže pro větší objemy dat se toto řešení bohužel nehodí.

Pokud je uživatel k aplikaci přihlášen a chceme, aby se změna dat projevila na všech jeho zařízeních (případně jde o změnu, která ovlivňuje i ostatní uživatele), tak je vhodné na server ihned odeslat požadavek pro uložení dat v cookie. Jen pokud se nepovede, tak data v cookie zůstanou a uloží se při dalším požadavku na server. Uživatele je v tom případě vhodné informovat o tom, že data ještě nejsou na straně serveru uložena.

Pokud se uložení dat má projevit jen v současném prohlížeči uživatele a nikde jinde (např. košík nepřihlášeného uživatele), tak extra požadavek na server ani posílat nemusíme a stačí počkat na přenos dat při dalším normálním požadavku.

A pokud stránku sestavujeme až na klientu, tak data na server ani nemusíme posílat a místo do cookie je můžeme uložit do localStorage.

Jakub Vrána, Řešení problému, 29.6.2016, diskuse: 4 (nové: 0)

Diskuse

ikona Jan Barášek:

Nákupní košíky ukládám obvykle do localStorage, která ovšem na některých telefonech s Androidem nefunguje, proto do košíku nelze nic uložit.

S tím by se mělo počítat, takže ukládám zálohu ještě do session.

Jednou jsem dostal dokonce od zákazníka požadavek, aby to fJungovalo i s vypnutým cookies - takže v některých případech předávám obsah košíku přímo v URL, což při pohybu po webu není ideální. Co si o tom myslíte vy?

Dan Novotný:

Jakube ty vaše články z poslední doby /rok - dva / jsou něco příšerného, se slzou vzpomínám kdy Vás to bavilo a články měly smysl.

paranoiq:

Dane, ty vaše komentáře z poslední doby / rok - dva / jsou něco příšerného, se slzou vzpomínám kdy Vás bavilo články číst a komentáře měly smysl.

Pavel Kravčík:

Paranoiqu, ty vaše komentáře z poslední doby / rok - dva / jsou něco příšerného, se slzou vzpomínám kdy Vás bavilo články číst a komentáře měly smysl.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2017 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.