2010-04-30 15 views
74

I database localStorage di HTML5 sono in genere a dimensione limitata - le dimensioni standard sono 5 o 10 MB per dominio. Questi limiti possono essere elusi dai sottodomini (ad esempio example.com, hack1.example.com e hack2.example.com hanno tutti i loro 5 MB di database)? E c'è qualcosa nello standard che specifica se i domini dei genitori possono accedere ai database dei loro figli? Non riesco a trovare nulla, e posso vedere gli argomenti per farlo in entrambi i casi, ma sembra che ci debba essere un modello standard.Limite di dimensioni HTML5 localStorage per i sottodomini

+1

sto lavorando in questo momento con un programma in cui stiamo cercando di memorizzare completamente tutto il testo in localStorage. Sarebbe fantastico se potessi aggiungere alcuni collegamenti a dove hai trovato queste informazioni sul limite attuale di 5MB. Mi aiuterebbe a capire meglio le alternative. Grazie – JeroenEijkhof

+6

I browser basati su Webkit utilizzano UTF-16 per l'archiviazione che ha un limite di 2,5 MB. – rxgx

+8

Nota, la RFC di giugno 2011 dice che "Gli agenti utente dovrebbero guardarsi dai siti che memorizzano dati sotto le origini di altri siti affiliati, ad esempio archiviando fino al limite in a1.example.com, a2.example.com, a3.example.com, ecc., aggirando il limite di archiviazione esempio.com principale. " Quindi non contare su quel trucco che continua a funzionare in futuro. (http://dev.w3.org/html5/webstorage/) –

risposta

51

Da http://dev.w3.org/html5/webstorage/#disk-space è raccomandato

Un limite prevalentemente arbitrario di cinque megabyte per origine. Il feedback sull'implementazione è benvenuto e verrà utilizzato per aggiornare questo suggerimento in futuro.

Si menziona anche che:

utente dovrebbero guardia contro i siti di stoccaggio dei dati, alle origini altri siti affiliati, per esempio archiviando fino al limite in a1.example.com, a2.example.com, a3.example.com, ecc., eludendo il limite di archiviazione esempio.com principale.

+5

Questo in realtà non risponde alla domanda sui sottodomini. –

+15

@ JörnZaefferer, l'* intento * della specifica è impedire l'utilizzo di sottodomini. –

+4

È interessante notare che, nonostante l'avviso nelle specifiche, a quanto pare solo FireFox ha implementato la prevenzione suggerita. Guarda questo progetto per un modo divertente di riempire il tuo disco/blocca il tuo browser: http://feross.org/fill-disk/ –

9

Ho perso questa domanda quando ho chiesto "Is 5MB the de facto limit for W3C Web Storage?", ma ho ottenuto fondamentalmente la stessa risposta. Se vuoi maggiori informazioni, ho fatto il link ad alcuni limiti specifici del browser nella mia domanda.

5

Una soluzione migliore è quella di utilizzare il [HTML5 IndexedDB per la memorizzazione offline.]1

Sembra che la sostituzione per il vecchio Web SQL (che sembra essere misnamed b/c è per offline memoria): DB indicizzato, che consente l'archiviazione offline ed è ancora supportato:

IndexedDB è nuovo in HTML5. I database Web sono ospitati e persistono all'interno del browser di un utente. Consentendo agli sviluppatori di creare applicazioni con ricche abilità di query, è previsto che emerga una nuova generazione di applicazioni Web che hanno la capacità di funzionare online e non in linea.

Maggiori informazioni e un test-app a: http://ido-green.appspot.com/WebSQL-IndexedDB-example/jqm_indexedDB.html

+0

Nessun supporto IndexedDB su cellulare per ora (potrebbe essere imminente in iOS 7). Quindi potrebbe essere meglio creare una persistenza api che avvolge WebSQL e IndexedDB fino a che IndexedDB è meglio supportato sui dispositivi mobili http://caniuse.com/#search=indexeddb – oligofren

+0

Questo dovrebbe essere un commento, poiché non risponde alla domanda. –

+1

In realtà penso che sia in grado di fornire il miglior consiglio possibile a qualcuno che pone la domanda iniziale. Separatamente, esiste una libreria di polyfill decente che implementa indexedDB su WebSQL per i browser mobili meno recenti. –

2

Per ottenere 50 MB di memorizzazione del codice utilizzo spazio sotto

// 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); 
}); 

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

Problemi correlati