Ist das HTML5 localStorage-Objekt pro Seite/Domäne isoliert? Ich frage mich, wie ich localStorage-Schlüssel nennen würde. Benötige ich ein separates Präfix? Oder kann ich sie benennen, was ich will?
Es handelt sich um eine Domain (die gleichen Trennungsregeln 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 brauchen kein Präfix , verwenden Sie jedoch eines, wenn Sie es benötigen. Ja, Sie können sie auch benennen, was Sie wollen.
Die Speicher sind pro Ursprung , wobei Ursprung dasselbe ist wie für die Same Origin Policy (eine Kombination aus Schema [http
vs. https
usw.], Port und Host). Von die Spezifikation :
Jeder Browserkontext der obersten Ebene verfügt über einen eindeutigen Satz von Sitzungsspeicherbereichen, einen für jeden Origin.
So ist der Speicher für http://a.example.com
und der Speicher für http://b.example.com
sind getrennt (und sie sind beide getrennt von http://stackoverflow.com
) wie das sind alle verschiedene Hosts. Ebenso http://example.com:80
und http://example.com:8080
und https://example.com
sind alle unterschiedlicher Herkunft.
In den Webspeicher ist kein Mechanismus integriert, der es einem Origin ermöglicht, auf den Speicher eines anderen zuzugreifen.
Beachten Sie, dass es sich um Origin handelt, nicht um URL, also http://example.com/page1
und http://example.com/page2
beide haben Zugriff auf den Speicher für http://example.com
.
Ja, jede Domain/Subdomain hat ein anderes localStorage und Sie können die Schlüssel nach Belieben aufrufen (Präfix ist nicht erforderlich).
Um einen Schlüssel zu erhalten, können Sie den Methodenschlüssel (Index) verwenden, wie z
localStorage.key(0);
Es gab ein Objekt mit dem Namen globalStorage, vor dem Sie mehrere localStorages haben konnten, aber es wurde aus den Spezifikationen verworfen
Wie bereits erwähnt, ist localStorage pro Protokoll, Host und Port eindeutig. Wenn Sie eine praktische Möglichkeit zur Steuerung Ihres Speichers mit vorangestellten Schlüsseln suchen, empfehle ich localDataStorage .
Durch das Voranstellen von Schlüsseln wird nicht nur die Erzwingung von segmentiertem gemeinsamem Speicher in derselben Domäne unterstützt, sondern es werden auch Javascript-Datentypen (Array, Boolescher Wert, Datum, Gleitkommazahl, Ganzzahl, Zeichenfolge und Objekt) transparent gespeichert 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 Grundwerte berücksichtigt, und Sie können mehrere Instanzen erstellen, um Ihren Speicher zu steuern.
Ich würde immer ein Präfix verwenden, um mögliche Kollisionen mit Benutzerskripten zu vermeiden - was auch localStorage verwenden könnte.
Es ist überall in dieser Domain verfügbar, wie Nick vorgeschlagen hat. Alternativ funktioniert sessionStorage etwas anders, da es sich vom Browserfenster unterscheidet. Das heißt, dass andere Registerkarten oder Fenster in derselben Domäne nicht auf dieselbe Kopie des Speicherobjekts zugreifen können.