Javascript cookies, jak správně nastavit cookies v javascriptu, jak používat cookies path

Ukládání informací na straně klienta, tedy cookies, se může hodit v několika případech. Obvykle to používám k nastavení odpovězené otázky v anketě, individuálního nastavení uživatele co se týče počtu řádků na stránku, individuální přednastavení některých hodnot na stránce apod.


Uložit cookies v javascriptu je snadné. Nastavuje se jako textový řetězec a skládá se z pěti parametrů, parametr se skládá z dvojic, každý parametr je oddělen středníkem:

variable=value; název cookie proměnné a její hodnota,
expires=date; doba expirace pro kterou jsou cookies platná,
path=path; cesta pro kterou jsou cookies platné,
domain=domainname; doména pro kterou je cookies platné, obvykle se nepoužívá,
secure; pokud chceme, aby cookies bylo čitelné jen v chráněném prostředí.

Vytvořený textový řetězec se ukládá do document.cookies. Příklad takového nastavení vypadá takto:

  1. document.cookie = 'variable=escapedvalueforvariable; expires=Tue, 8 Jul 2008 13:55:48 UTC; path=/';

Možná by Vám mohl dělat problém ten datum a jak ho nastavit, konkrétní použití a funkce, která nastaví cookies je tady:

  1. function setCookie(key, value, days, path, domain, secure) {
  2. value = encodeURIComponent(value); // hodnota value by měla být minimálně escapována pomocí funkce escape()
  3. value+='; domain='+domain;
  4. value+='; path='+path;
  5. // expirace
  6. var date = new Date();
  7. date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
  8. value+='; expires=' + date.toGMTString();
  9. // secure
  10. if (secure) value+='; secure';
  11. document.cookie = key + '=' + value;
  12. }

Smazání cookies pak probíhá nastavením již uběhlé expirační doby, např. včerejší datum.

Nastavení platnosti cookie jen pro aktuální stránku nebo aktuální skript

Rozsah platnosti pro cookie se nastavuje parametrem path, defualtně je v ukázce uvedeno "/", znamená to, že cookie je platná po celé doméně, tedy lze ji přečíst jak ze stránky /clanky.php, ze stránky /kontakt.php nebo i ze stránky /uzivatel/registrace.php apod.

Někdy se nám může hodit omezit platnost cookies u určitého skriptu nebo konkrétní stránky, zvlášť pokud jde o javascript, používám to např. pro uchování otevřených a zavřených záložek, s kterými se manipuluje pomocí javascriptu. Záložky jsou stejně pojmenované, ale na různých stránkách mají jiný význam, tedy v části uživatelé, chci zvlášť uchovávat nastavení u záložek 1,2,3 a v části články jinak.

Pokud nastavíme path na např. /uzivatel/, bude možné přečíst cookies ve všech skriptech umístěných pod adresářem uzivatel a všech dalších podadresářích.

Podobně můžeme pokračovat až na úroveň skriptu, např. /uzivatel/registrace.php, podstatná je i hodnota parametrů v url, při zadání /uzivatel/registrace.php?id=1 budou takto nastavená cookies čitelná jen pro skript s adresou /uzivatel/registrace.php?id=1, pro žádný jiný ne.

U cookies tedy závisí na textu v url uvedeném!

Jak uložit array do cookie?

To nelze, resp. lze, ale je potřeba pole převést na text. Cookie slouží pro ukládání textu, pokud chceme uložit pole do cookie budeme muset pole přízpůsobit textovému zápisu. Musíme javascript array serializovat a při čtení opět deserializovat. Snad by mohla stačit funkce toSource(), která vrátí serializovanou podobu pole, tak jako tak lze ukládát pole jen jako text.