Lokális böngésző tárolók: Local Storage, Session Storage, IndexedDB, Web SQL, Cookies.

Local Storage, Session Storage és cookies


Az internetes kapcsolat gyakran szakadozhat, vagy akár tartósan meg is szűnhet, éppen ezért szükségszerű a webes alkalmazásokat úgy kell implementálni, hogy offline módon is megbízhatóan működjenek, ezáltal növelve a felhasználói élményt. Tegyük fel azt az esetet, amikor kitöltünk egy kérdőívet és az adatok véglegesítése előtt megszakad az internetes kapcsolat. Jó esetben az alkalmazásunk kiírja, hogy a kapcsolat megszakadt, rossz esetben pedig erről nem kapunk értesítést és kárba is veszik az eddig befektetett munkánk (nem mentődik el az adat a központi adatbázisba). Ebből az okból kifolyólag merült fel a lokális tároló koncepciója. Manapság a böngészők többsége számos beépített lokális tárolóval rendelkezik, ezek közül a leggyakrabban használtak a következőek:

  • Local Storage

  • Session Storage

  • Cookies

  • IndexedDB

  • Web SQL

Mivel minden böngésző rendelkezik saját (elszeparált) lokális tárolókon, a tárolni kívánt információ kizárólag a kiválasztott böngészőben lesz elérhető, a többiben nem. Ezen felül az egyes számítógépek között se lesz megosztva az adatunk (mivel az információ lokális marad). Attól függően, hogy mit szeretnénk művelni a tárolt adatainkkal, tudunk új adatokat létrehozni, a meglévőeket módosítani és törölni. Elérkezett az ideje annak, hogy bemutassuk és összehasonlítsuk az egyes lokális tárolókat. A Local storage és a session storage működésük szempontjából rendkívül hasonlóan működnek, néhány tulajdonságot kivéve. Szemben a cookie-val, melynek szerepe teljesen eltér az előbb említett két tárolótól. Tárkapacitás szempontjából amíg a Local storage körübelül 10 mb-nyi és session storage küörübelül 5 mb-nyi adatot képes tárolni, addig a cookie jóval kisebb adat tárolására lett kitalálva (körübelül 4 kb). A cookie lokális tároló jóval hamarabb jelent meg, támogatottsága nem korlátozódik a HTML5-re, szerencsénkre azon böngészőkön is elérhetőek, amik támogatják a HTML4-et. A másik két lokális tároló támogatottsága kizárólag a HTML5 szabványra korlátozódik. Folytassuk az összehasonlítást egy böngészőn, hogy melyik lokális tároló miképp viselkedik, amennyiben új lapokat kezdünk el megnyitogatni. Vegyük példának a Google Chrome böngészőt. Cookie esetén a benne tárolt adat minden egyes megnyitott lapon elérhető lesz, ugyanazt a weboldalt megnyitva. Session storage esetén a benne tárolt adat csakis azon a lapon lesz elérhető, melyen jelenleg tartózkodunk, hiába keressük fel ugyanazt a weboldalt egy másik lapon. Folytassuk az összehasonlítást az adatok megőrzése tekintetében. Session storage esetén amint bezárunk a böngészőben egy olyan lapot ahol tároltunk egy hozzá tartozó adatot, az automatikusan törlődik. Local storage esetén függetlenül attól, hogy mely lapokat zárjuk be / nyitjuk meg, a weboldalhoz tartozó adatunk egészen addig megmarad, míg manuálisan ki nem töröljük. Cookie esetén mi magunk manuálisan beállíthatjuk lejárati időt. Amint ez az idő lejár automatikusan érvényteleníti magát, jobb esetben törlődik is. Folytassuk az összehasonlítást az adatok tárolásának tekintetében. Eddig úgy beszéltünk a lokális tárolókról, mintha kizárólag a kliens oldallal szinkronizálható. Ez nem teljesen igaz. Terjesszük ki az érvényességi hatókört a szerver oldalra. Az derül ki, hogy amíg a Local storage-nak és a Session storage-nak nincs szerepe a szerver oldalon szemben a Cookie-val, melynek talán az egyik legfontosabb tulajdonsága éppen az, hogy a szerver és a kliens oldal közti adatcserét ebben a formában ellássa. A kapacitása ebből az okból kifolyólag limitált. A lenti táblázatban összehasonlítottuk támogatottság, tárolás módja, kapacitás, elérhetőség, érvényesség és kéréssel el lehet küldeni szempontok szerint:

Lokális tárolók összehasonlítása
Local storage Session storage Cookies
HTML5 HTML5 HTML4/HTML5
böngésző böngésző böngésző vagy szerver
10mb 5mb 4kb
bármelyik ablak ugyanazon lap bármelyik ablak
végtelen a lap bezárásáig manuálisan beállítható
nem nem igen


Local storage HTML5
Session storage HTML5
Cookies HTML4/HTML5
Local storage böngésző
Session storage böngésző
Cookies böngésző vagy szerver
Local storage 10mb
Session storage 5mb
Cookies 4kb
Local storage bármelyik ablak
Session storage ugyanazon lap
Cookies bármelyik ablak
Local storage végtelen
Session storage a lap bezárásáig
Cookies manuálisan beállítható
Local storage nem
Session storage nem
Cookies igen
Lokális tárolók összehasonlítása

Ennyit az elméletről, következzen a gyakorlat. Kezdésnek definiáljunk néhány változót a Local storage-ban. Ahhoz, hogy elérhessük ezt a funkciót, meg kell hívni a window globális objektum localStorage tulajdonságát. Ez a lokális tároló számos tulajdonsággal és metódussal rendelkezik, melyek közül leggyakrabban használtak az alábbiak: getItem, keyremoveItem, setItem, clear. Ahhoz, hogy elmentsünk valamilyen adatot lokálisan, a setItem metódusát kell meghívni, mely két sztring-típusú paraméterrel rendelkezik: key és value. Ahhoz, hogy lekérjünk egy létező adatot a kulcs azonosítója alapján (melyhez a kívánt adat van társítva), a getItem metódust kell meghívni, mely egyetlen sztring-típusú paraméterrel rendelkezik: key. Amennyiben a hivatkozott kulcs nem létezik, egy null értékkel tér vissza. Ahhoz, hogy törölhessünk egy kívánt kulcs-érték párost, a removeItem nevezetű metódus áll a rendelkezésünkre, mely egyetlen sztring-típusú paraméterrel rendelkezik: key. Néhány konkrét példa keretén belül figyeljük meg, hogy pontosan mi történik.

// nev elmentése
window.localStorage.setItem('nev','Zoltan');
// nev kiolvasása
console.log(window.localStorage.getItem('nev'));  
//  Zoltan
// nev törlése
window.localStorage.removeItem('nev'));
console.log(window.localStorage.getItem('nev'));  
//  null

Folytassuk a tárgyalást a Session storage-al. Kezdésnek definiáljunk néhány változót a Session storage-ban. Ahhoz, hogy elérhessük ezt a funkciót, meg kell hívni a window globális objektum sessionStorage tulajdonságát. Ez a lokális tároló számos tulajdonsággal és metódussal rendelkezik, melyek közül leggyakrabban használtak az alábbiak: getItem, keyremoveItem, setItem, clear. Ahhoz, hogy elmentsünk valamilyen adatot lokálisan, a setItem metódusát kell meghívni, mely két sztring-típusú paraméterrel rendelkezik: key és value. Ahhoz, hogy lekérjünk egy létező adatot a kulcs azonosítója alapján (melyhez a kívánt adat van társítva), a getItem metódust kell meghívni, mely egyetlen sztring-típusú paraméterrel rendelkezik: key. Amennyiben a hivatkozott kulcs nem létezik, egy null értékkel tér vissza. Ahhoz, hogy törölhessünk egy kívánt kulcs-érték párost, a removeItem nevezetű metódus áll a rendelkezésünkre, mely egyetlen sztring-típusú paraméterrel rendelkezik: key. Néhány konkrét példa keretén belül figyeljük meg, hogy pontosan mi történik.

// nev elmentése
window.sessionStorage.setItem('nev','Zoltán');
// nev kiolvasása
console.log(window.sessionStorage.getItem('nev'));  
//  Zoltán
// nev törlése
window.sessionStorage.removeItem('nev'));
console.log(window.sessionStorage.getItem('nev'));  
//  null

Folytassuk a tárgyalást a cookie-val. Kezdésnek definiáljunk néhány változót a Session storage-ban. Ahhoz, hogy elérhessük ezt a funkciót, meg kell hívni a document globális objektum cookie tulajdonságát. Ahhoz, hogy létrehozzunk egy új cookie-t egy értékadással átadhatjuk a kulcs-érték párt (mint string) egyenlőségjellel evlálasztva őket. Ez a lokális tároló számos tulajdonsággal rendelkezik (alapértelmezett értékekkel), melyek közül leggyakrabban használtak az alábbiak: Domain, Path, Expiration, Size. Minden egyes property beállítását pontos vesszővel kell leválasztani az átadni kívánt string-en belül. Ahhoz, hogy lekérjünk egy létező adatot, balszerencsénkre a console.log() globális metódust kell meghívi. Néhány konkrét példa keretén belül figyeljük meg, hogy pontosan mi történik.

// nev és lejárat beállítása
document.cookie = `nev=Zoltán;expires=${new Date(2019,12,12).toUTCString()}`;

IndexedDB


Web SQL


Irodalomjegyzék

[1]
Vue.js core team. Vue.js: The Progressive JavaScript Framework. https://vuejs.org, Legutóbb megtekintve: 2019. április 22.
[2]
Vue.js core team. API, Global Config, directive. https://vuex.vuejs.org/vuex.png, Legutóbb megtekintve: 2019. április 22.
[3]
Vue.js core team. API, Global Config, computed. https://vuejs.org/v2/api/#computed, Legutóbb megtekintve: 2019. április 22.
[4]
Vue.js core team. API, Global Config, components. https://vuejs.org/v2/api/#components, Legutóbb megtekintve: 2019. április 22.
[5]
Vue.js core team. Vue-CLI. https://cli.vuejs.org/guide/creating-a-project.html#vue-create, Legutóbb megtekintve: 2019. április 22.
[6]
Vue.js core team. Vue-router. https://router.vuejs.org/guide/#html, Legutóbb megtekintve: 2019. április 22.
[7]
Vue.js core team. Render Functions and JSX. https://vuejs.org/v2/guide/render-function.html, Legutóbb megtekintve: 2019. április 22.
[8]
w3schools core team. JavaScript RegExp Reference. https://www.w3schools.com/jsref/jsref_obj_regexp.asp, Legutóbb megtekintve: 2019. április 22.
[9]
Google Chrome DevTools core team. Chrome DevTools. https://developers.google.com/web/tools/chrome-devtools, Legutóbb megtekintve: 2019. április 22.
[10]
Node.js core team. Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. https://nodejs.org/en/, Legutóbb megtekintve: 2019. április 22.
[11]
NPMJS core team. NPMJS. https://www.npmjs.com, Legutóbb megtekintve: 2019. április 22.
[12]
ExpressJS core team. Express Fast, unopinionated, minimalist web framework for Node.js. https://expressjs.com, Legutóbb megtekintve: 2019. április 22.
[13]
EJS core team. EJS: Embedded JavaScript templating. https://ejs.co, Legutóbb megtekintve: 2019. április 22.
[14]
Olga Filipova. Learning Vue.js 2. Packt Publishing Ltd., Livery Place, 35 Livery Street, Birmingham, B3 2PB, UK, 3, 2016.
[15]
E.F. Codd. A relational Model of Data for Large Shared Data Banks. Communications of the ACM, 13 (6) 1970.
[16]
Papp Edit. Adatbáziskezelés. Booklands 2000 Könyvkiadó Kft., 5600 Békéscsaba, Dr. Becsey Oszkár u. 42., 1, 2004.
[17]
Nemzeti Szakképzési és Felnőttképzési hivatal. Szoftverfejlesztő tanfolyam. https://www.nive.hu, Legutóbb megtekintve: 2019. április 22.
[18]
JavaScript.info core team. JavaScript.info. https://javascript.info/promise-basics, Legutóbb megtekintve: 2019. április 22.
[19]
Craig Buckler. Sitepoint (JavaScript) - Understanding ES6 Modules. https://www.sitepoint.com/understanding-es6-modules/, Legutóbb megtekintve: 2019. április 22.