javascript - ejemplos - En HTML5, ¿está aislado el objeto localStorage por página/dominio?
localstorage javascript ejemplos (6)
Como han señalado otros, localStorage es único por protocolo, host y puerto. Si desea una forma práctica de controlar su almacenamiento con claves prefijadas, sugiero localDataStorage .
No solo ayuda a reforzar el almacenamiento compartido segmentado dentro del mismo dominio prefijando claves, sino que también almacena de forma transparente los tipos de datos de JavaScript (Array, Boolean, Date, Float, Integer, String y Object), proporciona una ofuscación de datos ligera, comprime automáticamente cadenas y facilita la búsqueda por clave (nombre) así como la consulta por valor (clave).
[DESCARGO DE RESPONSABILIDAD] Soy el autor de la utilidad [/ DISCLAIMER]
Ejemplos:
// 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
Como puede ver, se respetan los valores primitivos y puede crear varias instancias para controlar su almacenamiento.
¿El objeto localStorage de HTML5 está aislado por página / dominio? Me pregunto por cómo nombraría las claves locales de almacenamiento. ¿Necesito un prefijo por separado? ¿O puedo nombrarlos como quiera?
Está disponible en cualquier lugar de ese dominio como sugirió Nick, como alternativa hay sessionStorage funciona de forma ligeramente diferente ya que es distinta de la ventana del navegador. Es decir que otras pestañas o ventanas en el mismo dominio no tienen acceso a la misma copia del objeto de almacenamiento.
Las tiendas son por origen , donde el origen es el mismo que para la misma política de origen (una combinación de esquema [ http
vs. https
, etc.], puerto y host). De la especificación :
Cada contexto de navegación de nivel superior tiene un conjunto único de áreas de almacenamiento de sesión, una para cada origen.
Por lo tanto, el almacenamiento para http://a.example.com
y el almacenamiento para http://b.example.com
están separados (y ambos están separados de http://.com
) ya que todos son diferentes Hospedadores. Del mismo modo, http://example.com:80
y http://example.com:8080
y https://example.com
son todos orígenes diferentes.
No hay ningún mecanismo integrado en el almacenamiento web que permita que un origen acceda al almacenamiento de otro.
Tenga en cuenta que es origen , no URL, por lo que http://example.com/page1
y http://example.com/page2
ambos tienen acceso al almacenamiento de http://example.com
.
Sí, cada dominio / subdominio tiene un localStorage diferente y puedes llamar a las teclas como quieras (no se requiere prefijo).
Para obtener una clave, puede usar la tecla de método (índice), como
localStorage.key(0);
Hubo un objeto llamado globalStorage antes de que pudieras tener múltiples localStorages, pero ha sido desaprobado de las especificaciones
Siempre usaba un prefijo, solo para evitar posibles colisiones con las secuencias de comandos del usuario, que también podría usar localStorage.
Es por dominio (las mismas reglas de segregación que la misma política de origen ), para que sea por página, tendría que usar una clave basada en la location
o algún otro enfoque.
No necesita un prefijo, use uno si lo necesita. Además, sí, puedes ponerle el nombre que quieras.