Ist das HTML5 localStorage-Objekt pro Seite / Domäne isoliert? Ich frage mich, wie ich localStorage-Schlüssel benennen würde. Benötige ich ein separates Präfix? Oder kann ich sie benennen, was ich will?
Ist das HTML5 localStorage-Objekt pro Seite / Domäne isoliert? Ich frage mich, wie ich localStorage-Schlüssel benennen würde. Benötige ich ein separates Präfix? Oder kann ich sie benennen, was ich will?
Antworten:
Es ist pro Domain und Port (die gleichen Segregationsregeln wie die gleiche Ursprungsrichtlinie ), um es pro Seite zu machen, müssten Sie einen Schlüssel verwenden, der auf dem location
oder einem anderen Ansatz basiert .
Sie müssen nicht brauchen ein Präfix, verwenden Sie ein , wenn Sie es brauchen though. Ja, Sie können sie auch benennen, was Sie wollen.
protocol://host:port
Kombination.
Die Speicher befinden sich pro Ursprung , wobei "Ursprung" derselbe ist wie für die Richtlinie für denselben Ursprung (eine Kombination aus Schema [ http
vs. https
usw.], Port und Host). Aus der Spezifikation :
Jeder Browserkontext der obersten Ebene verfügt über einen eindeutigen Satz von Sitzungsspeicherbereichen, einen für jeden Ursprung.
Daher sind der Speicher für http://a.example.com
und der Speicher für http://b.example.com
getrennt (und beide sind getrennt von http://example.com
), da dies alles unterschiedliche Hosts sind. Ebenso http://example.com:80
und http://example.com:8080
und https://example.com
sind alle unterschiedliche Ursprünge.
In den Webspeicher ist kein Mechanismus integriert, mit dem ein Ursprung auf den Speicher eines anderen zugreifen kann.
Beachten Sie, dass es sich um den Ursprung und nicht um die URL handelt http://example.com/page1
und http://example.com/page2
beide Zugriff auf den Speicher für haben http://example.com
.
Ja, jede Domain / Subdomain hat einen anderen localStorage und Sie können die Schlüssel beliebig aufrufen (Präfix ist nicht erforderlich).
Um einen Schlüssel zu erhalten, können Sie den Methodenschlüssel (Index) wie z
localStorage.key(0);
Es gab zuvor ein Objekt namens globalStorage, in dem Sie mehrere localStorages haben konnten, das jedoch aus den Spezifikationen nicht mehr stammt
Wie andere bereits betont haben, ist localStorage pro Protokoll, Host und Port eindeutig. Wenn Sie Ihren Speicher auf praktische Weise mit Präfixschlüsseln steuern möchten, empfehle ich localDataStorage .
Es hilft nicht nur dabei, segmentierten gemeinsam genutzten Speicher innerhalb derselben Domäne durch Präfixieren von Schlüsseln zu erzwingen, sondern speichert auch transparent Javascript-Datentypen (Array, Boolescher Wert, Datum, Float, Ganzzahl, Zeichenfolge und Objekt), bietet eine einfache Datenverschleierung, komprimiert automatisch Zeichenfolgen und Erleichtert die Abfrage nach Schlüssel (Name) sowie die Abfrage nach (Schlüssel) Wert.
[HAFTUNGSAUSSCHLUSS] Ich bin der Autor des Dienstprogramms [/ HAFTUNGSAUSSCHLUSS]
Beispiele:
// instantiate our first storage object
// internally, all keys will use the specified prefix, i.e. passphrase.life
var localData = localDataStorage( 'passphrase.life' );
localData.set( 'key1', 'Belgian' )
localData.set( 'key2', 1200.0047 )
localData.set( 'key3', true )
localData.set( 'key4', { 'RSK' : [1,'3',5,'7',9] } )
localData.set( 'key5', null )
localData.get( 'key1' ) --> 'Belgian'
localData.get( 'key2' ) --> 1200.0047
localData.get( 'key3' ) --> true
localData.get( 'key4' ) --> Object {RSK: Array(5)}
localData.get( 'key5' ) --> null
// instantiate our second storage object
// internally, all keys will use the specified prefix, i.e. prismcipher.com
var localData2 = localDataStorage( 'prismcipher.com' );
localData2.set( 'key1', 123456789 ) // integer
localData2.get( 'key1' ) --> 123456789
Wie Sie sehen, werden primitive Werte berücksichtigt, und Sie können mehrere Instanzen erstellen, um Ihren Speicher zu steuern.
Es ist überall in dieser Domain verfügbar, wie Nick vorgeschlagen hat. Alternativ funktioniert sessionStorage etwas anders, da es sich vom Browserfenster selbst unterscheidet. Das heißt, andere Registerkarten oder Fenster in derselben Domäne haben keinen Zugriff auf dieselbe Kopie des Speicherobjekts.