Является ли объект HTML5 localStorage изолированным на страницу/домен? Мне интересно, как я назвал бы ключи localStorage. Нужен ли отдельный префикс? Или я могу назвать их все, что захочу?
В HTML5 объект localStorage изолирован на страницу/домен?
Ответ 1
Для каждого домена (те же правила сегрегации, что и та же самая политика происхождения), чтобы сделать это на одной странице, вам придется использовать ключ на основе location
или какой-либо другой подход.
Вам не нужен префикс, используйте его, если он вам нужен. Кроме того, да, вы можете назвать их, как хотите.
Ответ 2
Да, у каждого домена/поддомена есть другой localStorage, и вы можете вызывать ключи независимо от того, что вы хотите (префикс не требуется).
Чтобы получить ключ, вы можете использовать ключ метода (индекс), например
localStorage.key(0);
Был объект с именем globalStorage, прежде чем вы могли бы иметь несколько локальных хранилищ, но он устарел из спецификаций
Ответ 3
Хранилища расположены в исходном месте, где происхождение такое же, как для Same Origin Policy (комбинация схемы [ http
vs. https
и т.д.], порт и хост). Из спецификация:
Каждый контекст просмотра верхнего уровня имеет уникальный набор областей хранения сеансов, по одному для каждого источника.
Таким образом, хранилище для http://a.example.com
и хранилище для http://b.example.com
являются отдельными (и оба они обособлены от http://stackoverflow.com
), поскольку все это разные хосты. Точно так же http://example.com:80
и http://example.com:8080
и https://example.com
все разные истоки.
В веб-хранилище нет механизма, который позволяет одному источнику получить доступ к хранилищу другого.
Обратите внимание, что источник, а не URL, поэтому http://example.com/page1
и http://example.com/page2
имеют доступ к хранилищу для http://example.com
.
Ответ 4
Я всегда использовал префикс, чтобы избежать потенциальных столкновений с пользовательскими скриптами, которые также могут использовать localStorage.
Ответ 5
Как указывали другие, localStorage уникален для протокола, хоста и порта. Если вам нужен удобный способ управления хранилищем с помощью префиксных ключей, я предлагаю localDataStorage.
Это не только помогает обеспечить сегментированное разделяемое хранилище в том же домене с помощью префикса ключей, но и прозрачно хранит типы данных javascript (Array, Boolean, Date, Float, Integer, String и Object), обеспечивает облегчение обертывания данных, автоматически сжимает строки и облегчает запрос по ключу (имени), а также по запросу (ключ).
[ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ] Я являюсь автором утилиты [/DISCLAIMER]
Примеры:
// instantiate our first storage object
// internally, all keys will use the specified prefix, e.g. passphrase.life.key1
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, e.g. prismcipher.com.key1
var localData2 = localDataStorage( 'prismcipher.com' );
localData2.set( 'key1', 123456789 ) // integer
localData2.get( 'key1' ) --> 123456789
Как вы можете видеть, примитивные значения соблюдаются, и вы можете создать несколько экземпляров для управления хранилищем.
Ответ 6
Он доступен в любом месте в этом домене, как предложил Ник. В качестве альтернативы sessionStorage работает несколько по-другому, поскольку он отличается от самого окна браузера. То есть другие вкладки или окна в одном домене не имеют доступа к той же копии объекта хранения.