How to store persistent data client side
You can use the Web Storage API (Window.localStorage
or Window.sessionStorage
). Check out this article on html5doctor for a more in-depth explanation. The Web Storage API is supported by all modern browsers at this point.
The read-only localStorage property allows you to access a Storage object for the Document's origin; the stored data is saved across browser sessions. localStorage is similar to sessionStorage, except that while data stored in localStorage has no expiration time, data stored in sessionStorage gets cleared when the page session ends — that is, when the page is closed.
https://developer.mozilla.org/en/docs/Web/API/Window/localStorage
As highlighted above:
- To store the data indefinitely (until the cache is cleared), use
Window.localStorage
. - To store the data until the window is closed, use
Window.sessionStorage
.
There are two methods of setting and getting properties via the Window.localStorage
and Window.sessionStorage
API's:
-
Access the properties directly:
localStorage.name = 'ashes999'; console.log(localStorage.name); // ashes999 delete localStorage.name; console.log(localStorage.name); // undefined
sessionStorage.name = 'ashes999'; console.log(sessionStorage.name); // ashes999 delete sessionStorage.name; console.log(sessionStorage.name); // undefined
-
Use the
Storage.setItem
,Storage.getItem
, andStorage.removeItem
API methods.localStorage.setItem('name', 'ashes999'); console.log(localStorage.getItem('name')); // ashes999 localStorage.removeItem('name'); console.log(localStorage.getItem('name')); // undefined
sessionStorage.setItem('name', 'ashes999'); console.log(sessionStorage.getItem('name')); // ashes999 sessionStorage.removeItem('name'); console.log(sessionStorage.getItem('name')); // undefined
Caveats:
- Browsers may impose limitations on the storage capacity per origin of the Web Storage API, but you should be safe up to 5MB.
- The Web Storage API is limited by the same origin policy.
- Access to Web Storage from third-party IFrames is denied if the user has disabled third-party cookies in Firefox
You may store data in window.name
, which can hold up to 2MB of data (!).
/* on page 1 */
window.name = "Bla bla bla";
/* on page 2 */
alert(window.name); // alerts "Bla bla bla"
Edit: Also have a look at this Ajaxian article regarding this.
Note that other sites in the same tab/window does also have access to window.name
, so you shouldn't store anything confidential here.