В HTML5 объект localStorage изолирован на страницу/домен?

Является ли объект HTML5 localStorage изолированным на страницу/домен? Мне интересно, как я назвал бы ключи 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 работает несколько по-другому, поскольку он отличается от самого окна браузера. То есть другие вкладки или окна в одном домене не имеют доступа к той же копии объекта хранения.