Jaká bude náhrada za cookies?
Webové aplikace často potřebují ukládat data u klienta mezi jednotlivými požadavky a sezeními. Zatím se pro tento účel využívají cookies. Na některé úkoly však cookies nestačí. Čím je tedy v budoucnu nahradíme?
Nevýhody cookies
Jejich maximální velikost je velmi skromná (4 kB na jeden cookie) a mohou uchovávat jenom textové řetězce. Webové aplikace dnes už ale potřebují ukládat větší objem dat, a to v komplexnější podobě. Tato potřeba časem jistě poroste.
Nepříjemné je také to, že cookies jsou součástí každého HTTP požadavku, a tím dochází k jejich odesílání přes Internet.
Další problém se může projevit, když budeme pracovat ve více oknech s jednou a tou samou webovou aplikací, ovšem v každém okně vždy na jiném úkolu – průběžně ukládaná data se budou ukládat do jednoho cookie a vzájemně se přepisovat.
Storage API
Rozhraní Storage, které je je definováno ve formátu IDL, definuje dva typy virtuálního úložiště – sessionStorage
a localStorage
. První z nich je určený k uchovávání dat platných po dobu aktuální relace (tj. do zavření okna nebo panelu prohlížeče). Prohlížeče, které umožňují relace obnovovat však budou tato data uchovávat dokud bude relace obnovitelná. Každá relace disponuje svou vlastní kopií úložného datového prostoru, což řeší výše zmíněný problém s přepisováním dat.
Druhý typ úložiště zase představuje časově nelimitovaný úložný prostor. Prohlížeče by data v něm neměli automaticky mazat, jakmile dojde alokovaný prostor, ale navrhnout uživateli tento prostor rozšířit. Prakticky se bude jednat o celou sadu úložišť, protože každá stránka bude moci mít své vlastní lokální úložiště.
Data v těchto úložištích jsou uskladněna v podobě seznamu položek. Každá položka je tvořena dvojicí klíč : hodnota. Počet položek v daném úložišti zjistíme pomocí vlastnosti length
.
alert(localStorage.length); // v dialogovém okně zobrazí údaj o počtu položek
Kromě této vlastnosti mají objekty sessionStorage
a localStorage
i řadu metod.
key(n) |
vrací název klíče nté položky |
getItem(key) |
vrací hodnotu, která je asociována s klíčem předaným metodě jako argument |
setItem(key, value) |
přidává novou položku, nebo změní starou s identickým klíčem |
removeItem(key) |
odstraňuje položku, které přísluší klíč odpovídající argumentu této metody |
clear() |
smaže všechny položky |
sessionStorage.nazev_klice = "nová hodnota"; // změní hodnotu asociovanou ke klíči nazev_klice
alert(sessionStorage.nazev_klice); // zobrazí hodnotu asociovanou ke klíči nazev_klice
Stejně jako ostatní javascriptové objekty lze i objekty localStorage
a sessionStorage
považovat za jakési asociativní pole. Tudíž se pro přístup k jednotlivým položkám dají využít hranaté závorky jako v tomto příkladě:
sessionStorage["nazev_klice"] = "nova hodnota";
Změna v objektu, např. přidání nebo smazání položky, vyvolá událost onstorage
na daném objektu. Funkci, která je na tuto událost navázána se pak předává objekt StorageEvent (v IE to tak funguje až od 9. verze), který má tyto užitečné vlastnosti:
key |
přidaný, odstraněný, nebo upravený klíč |
oldValue |
předchozí hodnota, nebo null v případě přidané položky |
newValue |
předchozí hodnota, nebo null v případě odstraněné položky |
url |
adresa stránky, na níž událost vznikla |
Tato datová úložiště podporuje od osmé verze i Internet Explorer.
Databáze
Vysvětlili jsme si, že do sessionStorage a localStorage lze ukládat pouze položky v podobě párů asociovaných řetězců. Ne vždy ale takové jednoduché schéma dostačuje. Pro ukládání strukturovanějších dat by bylo určitě vhodnější nějaké databázové schéma. Stručně si teď popíšeme jeden z návrhů tohoto schématu.
Každá databáze má jméno a aktuální verzi. Ve jméně se rozlišuje velikost písmen. Verze je číslo, které se inkrementálně navyšuje a není možné jej libovolně přepisovat. Tímto způsobem je zabráněno tomu, aby existovalo současně více databází stejného jména a shodné verze. Nemělo by se díky tomu ani stávat, že nové údaje budou přepisovány starými.
Metoda openDatabase()
, která používá a vytváří databázi, má následující argumenty: jméno databáze, jméno verze, titulek, odhad objemu ukládaných dat (v bytech) a volitelně funkci, která zjišťuje, zda už byla databáze vytvořena. Odhad objemu ukládaných dat je tím důležitější, čím větší množství dat se ukládá, aplikace se tak může pokusit alokovat potřebný prostor naráz. Callback (tj. funkce s návratovou hodnotou) v posledním argumentu má význam zejména ve spojení s metodou changeVersion()
, která ověří číslo verze databáze a případně ho updatuje na aktuální.
Samotné zapisování nebo načítání dat je realizováno za pomoci SQL požadavků. Ty jsou vloženy do prvního argumentu metody executeSql()
objektu SQLTransaction
, která je zase volána přes první argument metod transaction()
a readTransaction()
u objektu Database
, který reprezentuje danou databázi. Metoda readTransaction()
je omezena na mód read-only.
Prohlížeče by měly uživatelům umožnit nastavit restriktivní pravidla pro ukládání dat a přístup k nim. A to hlavně z toho důvodu, že se v těchto databázích mohou ocitat i citlivé údaje typu e-mailů, zdravotních záznamů apod. Stejně tak by měli mít uživatelé kontrolu nad objemem dat, která na svůj disk ukládají.
Toto řešení nepodporují prohlížeče Firefox a Internet Explorer. Pro ukládání strukturovaných dat bude tedy lepší využít IndexedDB.
Mohlo by vás také zajímat
-
Co je to DNSSEC, jak funguje a jak si ho nastavit?
14. srpna 2024 -
4 tipy, jak na efektivní úsporu při rozjezdu podnikání
3. ledna 2023 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024
Aladin
Led 22, 2010 v 21:03Opera 10.50 to podporuje a je to parada.
Kuki
Led 25, 2010 v 17:21Nerozumiem, na co je dobre ukladanie velkeho mnozstva dat v pocitaci klienta. Webove aplikacie maju dostatok vypoctoveho vykonu aj ulozneho priestoru. Vadi nam, ked sa plnia registry, temporary internet files atd, a teraz pridu dalsie mega (alebo giga?) bajty dat navyse. S vysokou pravdepodobnostou budu tieto data zbytocne, kedze data vo webovych aplikaciach sa menia, vznikaju, zanikaju… Do jednej cookie (4kb) vojde 4096 znakov. Ak si vezmeme len znaky a-z a 0-9, potom nam jedna cookie moze poskytnut ulozisko pre 4096 premennych, kazda s 36 moznymi hodnotami. Nie je cookie dostatocne ulozisko?
Pavel Salvet
Led 27, 2010 v 13:29Například bude možné s webovými aplikacemi pracovat offline. Dále to může uspořit přenosovou kapacitu, neboť data se nebudou muset tak často přenášet na server.
Pro velké webové aplikace, např. webmail, cookies opravdu nedostačují.