HTML5では、ページ/ドメインごとに分離のlocalStorageオブジェクトですか?
-
25-09-2019 - |
質問
HTML5のlocalStorageオブジェクトは、ページ/ドメインごとに分離されていますか?私はので、私はのlocalStorageキーに名前を付けるだろうかと疑問に思って。私は別の接頭辞が必要なのでしょうか?それとも私が欲しいものは何でもそれらに名前を付けることができますか?
解決
これは、ドメインごとに(同一生成元ポリシーのと同じ分別ルール)です、ページごとにそれを作るために、あなたはlocation
に基づいてキー、または他のいくつかのアプローチを使用する必要があると思います。
あなたません。の必要性のプレフィックス、使用1あなたはかかわらず、それを必要とする場合。また、はい、あなたが欲しいものは何でもそれらに名前を付けることができます。
他のヒント
店舗があるのの、原点ポリシー
に(スキーマの組み合わせ[http
対https
、等]、ポート、およびホスト)。 からスペックのます:
それらは全て異なる宿主であるように、は各トップレベル・ブラウジング・コンテキストは、セッション記憶領域の一意のセット、各原点のための1つを有している。
はこのように、http://a.example.com
とhttp://b.example.com
ための貯蔵のための貯蔵には、独立している(それらは両方http://stackoverflow.com
から分離しています)。同様に、http://example.com:80
とhttp://example.com:8080
とhttps://example.com
は全て異なる起源である。
1人の起源は、別のストレージにアクセスすることを可能にするウェブストレージに組み込まれた機構がない。
なお、それのの起源のではなく、URL、http://example.com/page1
とhttp://example.com/page2
ので、両方http://example.com
用のストレージへのアクセスを持っています。
うん、各ドメイン/サブドメインは、ののlocalStorage異なるのを持って、あなたは(接頭辞は必要ありません)あなたが好きなキーを呼び出すことができます。
あなたがメソッドのキー(インデックス)を使用することができますキーを取得するなど、
localStorage.key(0);
と呼ばれるオブジェクトがあったの globalStorage を使用すると、複数のlocalStoragesを持つことができ、それはスペックから廃止されていますどこの前に
私は常にちょうどユーザスクリプトとの潜在的な衝突を避けるために、接頭辞を使用したい - 。あまりにものlocalStorageを使用することができた。
は、のlocalStorageは、プロトコル、ホスト&ポートごとに一意です。あなたは接頭辞のキーを使用してストレージを管理するための便利な方法をしたい場合は、私がお勧め localDataStorageするます。
だけでなく、それは助け鍵を付けることによって、同じドメイン内のセグメント化され、共有ストレージを強制しない、それはまた、透過的、自動的にJavaScriptのデータ型(アレイ、論理値、日付、フロート、整数、文字列やオブジェクト)、軽量のデータの難読化を提供し、圧縮を保存します文字列、および(キー)の値によってキー(名前)によって、クエリなどのクエリを容易にします。
[免責事項]私はユーティリティの作者だ[/免責事項]
例:
// 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
あなたが見ることができるように、プリミティブ値が尊重され、そしてあなたがあなたのストレージを制御するための複数のインスタンスを作成することができます。
これは、そのドメインで利用可能な任意の場所にあります。これは、同じドメイン上の他のタブやウィンドウは、ストレージオブジェクトの同じコピーへのアクセスを持っていないと言うことです。