Является ли HTML5-объект localStorage изолированным для каждой страницы / домена? Мне интересно из-за того, как я бы назвал ключи localStorage. Нужен ли отдельный префикс? Или я могу назвать их как я хочу?
Является ли HTML5-объект localStorage изолированным для каждой страницы / домена? Мне интересно из-за того, как я бы назвал ключи localStorage. Нужен ли отдельный префикс? Или я могу назвать их как я хочу?
Ответы:
Это для домена и порта (те же правила сегрегации, что и в той же политике происхождения ), чтобы сделать это для каждой страницы, вам нужно будет использовать ключ на основе location
или другого подхода.
Вам не нужен префикс, используйте его, если он вам нужен. Кроме того, да, вы можете назвать их как хотите.
protocol://host:port
комбинации.
Хранилища для каждого источника , где «происхождение» такое же, как и в « Политике одного источника» (комбинация схемы [ http
и https
т. Д.], Порта и хоста). Из спецификации :
Каждый контекст просмотра верхнего уровня имеет уникальный набор областей хранения сеансов, по одной для каждого источника.
Таким образом, хранилище для http://a.example.com
и хранилище для них http://b.example.com
являются отдельными (и они оба отделены http://example.com
), поскольку все они являются разными хостами. Точно так же http://example.com:80
и http://example.com:8080
и https://example.com
все имеют различное происхождение.
В веб-хранилище не встроен механизм, позволяющий одному источнику получать доступ к хранилищу другого.
Обратите внимание , что это начало , а не URL, так http://example.com/page1
и http://example.com/page2
оба имеют доступ к хранилищу для http://example.com
.
Да, у каждого домена / субдомена есть свой localStorage, и вы можете вызывать ключи как хотите (префикс не требуется).
Чтобы получить ключ, вы можете использовать метод ключ (индекс), такой как
localStorage.key(0);
До этого существовал объект с именем globalStorage, в котором вы могли иметь несколько локальных хранилищ, но он не рекомендуется использовать в спецификации.
Как уже отмечали другие, localStorage уникален для каждого протокола, хоста и порта. Если вам нужен удобный способ управления хранилищем с помощью префиксных ключей, я рекомендую localDataStorage .
Он не только помогает обеспечить сегментированное общее хранилище в том же домене с помощью префиксов ключей, он также прозрачно хранит типы данных javascript (Array, Boolean, Date, Float, Integer, String и Object), обеспечивает легкую обфускацию данных, автоматически сжимает строки и облегчает запрос по ключу (имя), а также запрос по (ключу) значению.
[ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ] Я являюсь автором утилиты [/ ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ]
Примеры:
// 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
Как видите, примитивные значения соблюдаются, и вы можете создать несколько экземпляров для управления вашим хранилищем.