L'objet HTML5 localStorage est-il isolé par page / domaine? Je me demande comment je nommerais les clés localStorage. Ai-je besoin d'un préfixe distinct? Ou puis-je les nommer comme je veux?
L'objet HTML5 localStorage est-il isolé par page / domaine? Je me demande comment je nommerais les clés localStorage. Ai-je besoin d'un préfixe distinct? Ou puis-je les nommer comme je veux?
Réponses:
C'est par domaine et par port (les mêmes règles de ségrégation que la même politique d'origine ), pour le rendre par page, vous devez utiliser une clé basée sur la location
, ou une autre approche.
Vous n'avez pas besoin d' un préfixe, utilisez-en un si vous en avez besoin. En outre, oui, vous pouvez les nommer comme vous le souhaitez.
protocol://host:port
combinaison.
Les magasins sont par origine , où «origine» est la même que pour la même politique d'origine (une combinaison de schéma [ http
vs. https
, etc.], de port et d'hôte). De la spécification :
Chaque contexte de navigation de niveau supérieur possède un ensemble unique de zones de stockage de session, une pour chaque origine.
Ainsi, le stockage pour http://a.example.com
et le stockage pour http://b.example.com
sont séparés (et ils sont tous deux séparés de http://example.com
) car ce sont tous des hôtes différents. De même, http://example.com:80
et http://example.com:8080
et https://example.com
sont tous des origines différentes.
Il n'y a pas de mécanisme intégré au stockage Web permettant à une origine d'accéder au stockage d'une autre.
Notez que c'est l' origine , pas l'URL, donc http://example.com/page1
et les http://example.com/page2
deux ont accès au stockage pour http://example.com
.
Oui, chaque domaine / sous-domaine a un localStorage différent et vous pouvez appeler les clés comme vous le souhaitez (le préfixe n'est pas requis).
Pour obtenir une clé, vous pouvez utiliser la clé de méthode (index) telle que
localStorage.key(0);
Il y avait un objet appelé globalStorage avant où vous pouviez avoir plusieurs localStorages, mais il est obsolète par rapport aux spécifications
Comme d'autres l'ont souligné, localStorage est unique par protocole, hôte et port. Si vous voulez un moyen pratique de contrôler votre stockage avec des clés préfixées, je suggère localDataStorage .
Non seulement il aide à renforcer le stockage partagé segmenté dans le même domaine en préfixant les clés, mais il stocke également de manière transparente les types de données javascript (tableau, booléen, date, flottant, entier, chaîne et objet), fournit une obfuscation légère des données, compresse automatiquement les chaînes et facilite la requête par clé (nom) ainsi que la requête par valeur (clé).
[DISCLAIMER] Je suis l'auteur de l'utilitaire [/ DISCLAIMER]
Exemples:
// 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
Comme vous pouvez le voir, les valeurs primitives sont respectées et vous pouvez créer plusieurs instances pour contrôler votre stockage.
Il est disponible n'importe où sur ce domaine comme Nick l'a suggéré, comme alternative, sessionStorage fonctionne légèrement différemment en ce sens qu'il est distinct de la fenêtre du navigateur elle-même. C'est-à-dire que les autres onglets ou fenêtres du même domaine n'ont pas accès à cette même copie de l'objet de stockage.