HTML5 localStorageオブジェクトはページ/ドメインごとに分離されていますか? localStorageキーにどのように名前を付けるのか疑問に思っています。別のプレフィックスが必要ですか?または、好きな名前を付けることができますか?
ドメインごと( 同じOriginポリシー と同じ分離規則)、ページごとに作成するには、location
に基づいたキーまたは他のアプローチを使用する必要があります。
プレフィックスは必要ありません必要はありません。ただし、必要な場合はプレフィックスを使用します。また、はい、好きな名前を付けることができます。
ストアはオリジンごとに、ここでオリジンは 同じオリジンポリシー (スキーマ[http
vs. https
など]、ポート、およびホスト)。 仕様 から:
各トップレベルのブラウジングコンテキストには、各Originに1つずつ、一意のセッションストレージエリアのセットがあります。
したがって、http://a.example.com
のストレージとhttp://b.example.com
のストレージは別個のものです(また、両方ともhttp://stackoverflow.com
とは別個のものです)。これらはすべて異なるホストです。同様に、http://example.com:80
とhttp://example.com:8080
とhttps://example.com
はすべて異なる起源です。
1つのOriginが別のOriginのストレージにアクセスできるようにするWebストレージに組み込まれたメカニズムはありません。
URLではなくOriginなので、http://example.com/page1
とhttp://example.com/page2
は両方ともhttp://example.com
のストレージにアクセスできます。
ええ、各ドメイン/サブドメインには異なるlocalStorageがあり、好きなキーを呼び出すことができます(プレフィックスは不要です)。
キーを取得するには、次のようなメソッドkey(index)を使用できます
localStorage.key(0);
globalStorageというオブジェクトが複数の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
ご覧のとおり、プリミティブな値が尊重され、ストレージを制御するために複数のインスタンスを作成できます。
LocalStorageを使用する可能性があるユーザースクリプトとの潜在的な衝突を避けるために、常にプレフィックスを使用します。
Nickが示唆したように、そのドメインのどこでも利用できます。代替として、sessionStorageはブラウザウィンドウ自体とは異なるという点で少し異なる動作をします。つまり、同じドメイン上の他のタブまたはウィンドウは、ストレージオブジェクトの同じコピーにアクセスできません。