В HTML5 объект localStorage изолирован для каждой страницы / домена? - PullRequest
143 голосов
/ 17 ноября 2010

Изолирован ли объект HTML5 localStorage для каждой страницы / домена? Мне интересно из-за того, как я бы назвал ключи localStorage. Нужен ли отдельный префикс? Или я могу назвать их как я хочу?

Ответы [ 6 ]

166 голосов
/ 17 ноября 2010

Это для домена (те же правила сегрегации, что и та же политика происхождения ), чтобы сделать это для каждой страницы, вам придется использовать ключ на основе location или какой-либо другой подход.

Вам не нужно нужен префикс, используйте его, если он вам нужен.Кроме того, да, вы можете назвать их как хотите.

13 голосов
/ 25 января 2017

Хранилища: на источник , где происхождение такое же, как для Одинаковая политика происхождения (комбинация схемы [http против https и т. Д.] , порт и хост). От спецификации :

Каждый контекст просмотра верхнего уровня имеет уникальный набор областей хранения сеансов, по одной для каждого источника.

Таким образом, хранилище для http://a.example.com и хранилище для http://b.example.com являются отдельными (и оба они отделены от http://stackoverflow.com), поскольку все они являются разными хостами. Точно так же http://example.com:80 и http://example.com:8080 и https://example.com имеют различное происхождение.

В веб-хранилище не встроен механизм, позволяющий одному источнику обращаться к хранилищу другого.

Обратите внимание, что это origin , а не URL, поэтому http://example.com/page1 и http://example.com/page2 оба имеют доступ к хранилищу для http://example.com.

7 голосов
/ 22 ноября 2010

Да, каждый домен / поддомен имеет свой localStorage , и вы можете вызывать ключи как хотите (префикс не требуется).

Чтобы получить ключ, вы можете использовать метод ключ (индекс), такой как

localStorage.key(0);

Ранее существовал объект с именем globalStorage , в котором вы могли иметь несколько локальных хранилищ, но он устарел из спецификации

5 голосов
/ 01 апреля 2011

Я бы всегда использовал префикс, просто чтобы избежать потенциальных коллизий с пользовательскими скриптами, которые тоже могут использовать localStorage.

4 голосов
/ 17 июля 2017

Как уже отмечали другие, localStorage уникален для каждого протокола, хоста и порта.Если вам нужен удобный способ управления вашим хранилищем с помощью префиксных ключей, я предлагаю localDataStorage .

. Он не только помогает обеспечить сегментированное общее хранилище в том же домене путем добавления префиксов ключей, но и прозрачнохранит типы данных javascript (Array, Boolean, Date, Float, Integer, String и Object), обеспечивает упрощенную обфускацию данных, автоматически сжимает строки и облегчает запрос по ключу (имени), а также запрос по значению (key).

[ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ] Я являюсь автором утилиты [/ DISCLAIMER]

Примеры:

// 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

Как видите, примитивные значения соблюдаются, и вы можете создать несколько экземпляров.контролировать ваше хранилище.

0 голосов
/ 14 октября 2011

Он доступен в любом месте этого домена, как предположил Ник, в качестве альтернативы существует сессия sessionStorage, которая отличается от самого окна браузера. То есть другие вкладки или окна в том же домене не имеют доступа к той же копии объекта хранилища.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...