Web storage
HTML |
---|
Comparisons |
Web storage and DOM storage (Document Object Model storage) are web application software methods and protocols used for storing data in a web browser. Web storage supports persistent data storage, similar to cookies but with a greatly enhanced capacity[1] and no information stored in the HTTP request header.[2] There are two main web storage types: local storage and session storage, behaving similarly to persistent cookies and session cookies respectively.
Web storage is being standardized by the World Wide Web Consortium (W3C). It was originally part of the HTML5 specification, but is now in a separate specification.[3] It is supported by Internet Explorer 8, Mozilla-based browsers (e.g., Firefox 2+, officially from 3.5),[4] Safari 4, Google Chrome 4 (session storage is from 5), and Opera 10.50. As of 14 March 2011 Opera and IE9 support the storage events.[5]
Features
Web storage can be viewed simplistically as an improvement on cookies. However, it differs from cookies in some key ways.
Storage size
Web storage provides far greater storage capacity (5 MB per origin in Google Chrome,[6] Mozilla Firefox,[7] and Opera; 10 MB per storage area in Internet Explorer;[8] 25MB per origin on BlackBerry 10 devices) compared to 4 kB (around 1000 times less space) available to cookies.
Client-side interface
Unlike cookies, which can be accessed by both the server and client side, web storage falls exclusively under the purview of client-side scripting.
Web storage data is not automatically transmitted to the server in every HTTP request, and a web server can't directly write to Web storage. However, either of these effects can be achieved with explicit client-side scripts, allowing for fine-tuning of the desired interaction with the server.
Local and session storage
Web storage offers two different storage areas—local storage and session storage—which differ in scope and lifetime. Data placed in local storage is per origin (the combination of protocol, hostname, and port number as defined in the same-origin policy) (the data is available to all scripts loaded from pages from the same origin that previously stored the data) and persists after the browser is closed. Session storage is per-origin-per-window-or-tab and is limited to the lifetime of the window. Session storage is intended to allow separate instances of the same web application to run in different windows without interfering with each other, a use case that's not well supported by cookies.[9]
Interface and data model
Web storage currently provides a better programmatic interface than cookies because it exposes an associative array data model where the keys and values are both strings. An additional API for accessing structured data is being considered by the W3C Web Applications Working Group. [10]
Usage
Browsers that support web storage have the global variables sessionStorage
and localStorage
declared at the window level. The following JavaScript code can be used on these browsers to trigger web storage behaviour:
sessionStorage
// Store value on browser for duration of the session
sessionStorage.setItem('key', 'value');
// Retrieve value (gets deleted when browser is closed and re-opened)
alert(sessionStorage.getItem('key'));
localStorage
// Store value on the browser beyond the duration of the session
localStorage.setItem('key', 'value');
// Retrieve value (persists even after closing and re-opening the browser)
alert(localStorage.getItem('key'));
Accessing data for the currently browsed domain
The following code can be used to retrieve all values stored in local storage for the currently browsed domain (the domain for the web page that is being browsed).
This JavaScript code can be executed using development tools available in most modern browsers such as the IE Developer Toolbar, Chrome Developer Tools, the Firebug extension in Firefox, or Opera Dragonfly:
var output = "LOCALSTORAGE DATA:\n------------------------------------\n";
if (localStorage) {
if (localStorage.length) {
for (var i = 0; i < localStorage.length; i++) {
output += localStorage.key(i) + ': ' + localStorage.getItem(localStorage.key(i)) + '\n';
}
} else {
output += 'There is no data stored for this domain.';
}
} else {
output += 'Your browser does not support local storage.'
}
console.log(output);
Data types
Only strings can be stored via the Storage API.[11] Attempting to store a different data type will result in an automatic conversion into a string in most browsers. Conversion into JSON (JavaScript Object Notation), however, allows for effective storage of JavaScript objects.
// Store an object instead of a string
localStorage.setItem('key', {name: 'value'});
alert(typeof localStorage.getItem('key')); // string
// Store an integer instead of a string
localStorage.setItem('key', 1);
alert(typeof localStorage.getItem('key')); // string
// Store an object using JSON
localStorage.setItem('key', JSON.stringify({name: 'value'}));
alert(JSON.parse(localStorage.getItem('key')).name); // value
Nomenclature
The W3C draft is titled "Web Storage", but "DOM storage" is also a commonly used name.[12][13]
The "DOM" in DOM storage does not literally refer to the Document Object Model. According to the W3C, "The term DOM is used to refer to the API set made available to scripts in Web applications, and does not necessarily imply the existence of an actual Document object..."[14]
Web Storage Management
Storage of web storage objects is enabled by default in Mozilla Firefox and SeaMonkey, but can be disabled by setting the "about:config" parameter "dom.storage.enabled" to false.[15]
Mozilla Firefox stores all web storage objects in a single file named webappsstore.sqlite. The sqlite3 command can be used to show the elements stored therein.[16]
There are browser extensions/add-ons for Google Chrome and Mozilla Firefox available that let the user deal with web storage, such as "Click&Clean"[17][18] and "BetterPrivacy" which can be configured to remove the whole web storage automatically on a regular basis.[19][20][21]
See also
- Gears
- HTTP cookie
- Indexed Database API
- Local shared object (aka "Flash cookie")
- Web SQL Database
References
- ↑ Opera Web Storage, 2011 http://dev.opera.com/articles/view/web-storage/
- ↑ AndyHume.net, 2011 http://blog.andyhume.net/localstorage-is-not-cookies
- ↑ Web Storage. W3.org. Retrieved on 2011-06-12.
- ↑ Mozilla Developer Center: DOM Storage. Developer.mozilla.org. Retrieved on 2011-06-12.
- ↑ . HTML5 Web Storage in Essence (2011-02-28). Retrieved on 2012-03-30.
- ↑ chrome.storage.local.QUOTA_BYTES Chrome extension developer documentation.
- ↑ John Resig: DOM Storage. John Resig, ejohn.org. Retrieved on 2011-06-12.
- ↑ Introduction to Web Storage. Microsoft Developer Network, msdn.microsoft.com. Retrieved on 2014-08-05.
- ↑ W3C: Web Storage draft standard. Dev.w3.org (2004-02-05). Retrieved on 2011-06-12.
- ↑ W3C: Indexed Database API. W3C. Retrieved on 2012-02-12.
- ↑ W3C, 2011 http://dev.w3.org/html5/webstorage/
- ↑ Mozilla Developer Center: DOM Storage. Developer.mozilla.org. Retrieved on 2011-06-12.
- ↑ MSDN: Introduction to DOM Storage. Msdn.microsoft.com. Retrieved on 2011-06-12.
- ↑ W3C: Web Storage draft standard. Dev.w3.org (2004-02-05). Retrieved on 2011-06-12.
- ↑ Mozillazine article on disabling Web Storage Objects in about:config. Kb.mozillazine.org. Retrieved on 2011-06-12.
- ↑ Firefox’s Super Cookies, Cerias, January 16, 2008
- ↑ "Click&Clean" extension for Google Chrome. Hotcleaner.com (2011-06-01). Retrieved on 2011-06-12.
- ↑ "Click&Clean add-on for Mozilla Firefox. Addons.mozilla.org. Retrieved on 2011-06-12.
- ↑ Mozilla add-ons page for "Better Privacy". Addons.mozilla.org. Retrieved on 2011-06-12.
- ↑ Homepage of "Better Privacy", with some further references to blogs and articles. Netticat.ath.cx. Retrieved on 2011-06-12.
- ↑ Google Chrome Browser Client-Side Storage. Hotcleaner.com. Retrieved on 2011-06-12.
External links
- W3C: Web Storage
- MSDN: Introduction to DOM Storage
- Mozilla Developer Center: Web Storage API
- Opera: Web Storage: easier, more powerful client-side data storage
- BB10: HTML5 WebWorks Api Reference