web-dev-qa-db-fra.com

Limite de taille HTML5 localStorage pour les sous-domaines

Les bases de données localStorage de HTML5 sont généralement limitées en taille - les tailles standard sont de 5 ou 10 Mo par domaine. Ces limites peuvent-elles être contournées par sous-domaines (par exemple, example.com, hack1.example.com et hack2.example.com ont-ils chacun leur propre base de données de 5 Mo)? Et y at-il quelque chose dans la norme qui spécifie si les domaines parents peuvent accéder aux bases de données de leurs enfants? Je ne trouve rien et je peux voir les arguments pour le faire de toute façon, mais il semble qu'il doit y avoir un modèle standard.

76
Chuck

De http://dev.w3.org/html5/webstorage/#disk-space

Une limite essentiellement arbitraire de cinq mégaoctets par origine est recommandée. Les commentaires sur la mise en œuvre sont les bienvenus et seront utilisés pour mettre à jour cette suggestion dans le futur.

Il mentionne également que:

Les agents utilisateurs doivent se prémunir contre le stockage de données par les sites appartenant à l'origine à d'autres sites affiliés, par exemple. stocker jusqu'à la limite dans a1.example.com, a2.example.com, a3.example.com, etc., en contournant la limite de stockage principale example.com.

53
Vetle

Voici un résultat de test assez détaillé avec de nombreux navigateurs de bureau et mobiles couverts: http://dev-test.nemikor.com/web-storage/support-test/

Ce qui confirme ce rapport de bogue: http://code.google.com/p/chromium/issues/detail?id=58985#c15

Vous ne pouvez compter que sur 2,5 Mo, et non sur 5 Mo, en fonction de la longueur de chaîne que vous pouvez stocker.

14
Jörn Zaefferer

J'ai raté cette question lorsque j'ai demandé " 5 Mo est-il la limite de facto pour le stockage Web W3C? ", mais j'ai essentiellement la même réponse. Si vous souhaitez plus d'informations, j'ai posé un lien vers certaines limites spécifiques du navigateur dans ma question.

9
Kevin Hakanson

Une meilleure solution consiste à utiliser [HTML5 IndexedDB pour le stockage hors connexion.] 1

Il semble que le remplacement de l'ancien Web SQL (qui semble être mal nommé b/c c'est pour hors connexion stockage) est: DB indexée, qui permet le stockage hors connexion et est toujours prise en charge:

IndexedDB est nouveau dans HTML5. Les bases de données Web sont hébergées et persistantes dans le navigateur de l'utilisateur. En permettant aux développeurs de créer des applications dotées de capacités d'interrogation riches, il est envisagé de créer une nouvelle génération d'applications Web capables de travailler en ligne et hors ligne .

Plus d'infos et un test-app à l'adresse: http://ido-green.appspot.com/WebSQL-IndexedDB-example/jqm_indexedDB.html

6
Clay Nichols

Pour obtenir 50 Mo d'espace de stockage, utilisez le code ci-dessous.

// 1. paste this line in your code
!function(){function e(t,o){return n?void(n.transaction("s").objectStore("s").get(t).onsuccess=function(e){var t=e.target.result&&e.target.result.v||null;o(t)}):void setTimeout(function(){e(t,o)},100)}var t=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;if(!t)return void console.error("indexDB not supported");var n,o={k:"",v:""},r=t.open("d2",1);r.onsuccess=function(e){n=this.result},r.onerror=function(e){console.error("indexedDB request error"),console.log(e)},r.onupgradeneeded=function(e){n=null;var t=e.target.result.createObjectStore("s",{keyPath:"k"});t.transaction.oncomplete=function(e){n=e.target.db}},window.ldb={get:e,set:function(e,t){o.k=e,o.v=t,n.transaction("s","readwrite").objectStore("s").put(o)}}}();

// 2. Setting values
ldb.set('nameGoesHere', 'value goes here');

// 3. Getting values - callback is required because the data is being retrieved asynchronously:
ldb.get('nameGoesHere', function (value) {
  console.log('And the value is', value);
});

source https://github.com/DVLP/localStorageDB

2
Pawel