Apakah objek localStorage HTML5 diisolasi per halaman / domain? Saya bertanya-tanya karena bagaimana saya memberi nama kunci Penyimpanan lokal. Apakah saya memerlukan awalan terpisah? Atau bisakah saya beri nama apa pun yang saya inginkan?
Apakah objek localStorage HTML5 diisolasi per halaman / domain? Saya bertanya-tanya karena bagaimana saya memberi nama kunci Penyimpanan lokal. Apakah saya memerlukan awalan terpisah? Atau bisakah saya beri nama apa pun yang saya inginkan?
Jawaban:
Ini per domain dan port (aturan pemisahan yang sama dengan kebijakan asal yang sama ), untuk membuatnya per halaman Anda harus menggunakan kunci berdasarkan location
, atau beberapa pendekatan lain.
Anda tidak perlu awalan, gunakan satu jika Anda membutuhkannya. Juga, ya, Anda dapat memberi nama mereka apa pun yang Anda inginkan.
protocol://host:port
kombinasi.
Toko-toko adalah per asal , di mana "asal" sama dengan Kebijakan Same Origin (kombinasi skema [ http
vs. https
, dll], port, dan host). Dari spec :
Setiap konteks penelusuran tingkat atas memiliki satu set area penyimpanan sesi yang unik, satu untuk setiap sumber.
Jadi, penyimpanan untuk http://a.example.com
dan penyimpanan http://b.example.com
terpisah (dan keduanya terpisah http://example.com
) karena semuanya adalah host yang berbeda. Demikian pula, http://example.com:80
dan http://example.com:8080
dan https://example.com
semuanya berasal berbeda.
Tidak ada mekanisme yang dibangun dalam penyimpanan web yang memungkinkan satu asal mengakses penyimpanan yang lain.
Perhatikan bahwa itu asalnya , bukan URL, sehingga http://example.com/page1
dan http://example.com/page2
keduanya memiliki akses ke penyimpanan untuk http://example.com
.
Ya, setiap domain / subdomain memiliki localStorage yang berbeda dan Anda dapat memanggil tombol apa pun yang Anda inginkan (awalan tidak diperlukan).
Untuk mendapatkan kunci, Anda dapat menggunakan kunci metode (indeks) seperti
localStorage.key(0);
Ada objek yang disebut globalStorage sebelum di mana Anda bisa memiliki beberapa localStorage, tapi sudah tidak digunakan lagi dari spesifikasi
Seperti yang telah ditunjukkan orang lain, localStorage unik untuk setiap protokol, host & port. Jika Anda ingin cara praktis untuk mengontrol penyimpanan Anda dengan kunci awalan, saya sarankan localDataStorage .
Tidak hanya membantu menegakkan penyimpanan bersama yang disegmentasi dalam domain yang sama dengan awalan kunci, itu juga secara transparan menyimpan tipe data javascript (Array, Boolean, Date, Float, Integer, String dan Object), menyediakan kebingungan data ringan, secara otomatis mengompresi string, dan memfasilitasi permintaan dengan kunci (nama) serta permintaan dengan nilai (kunci).
[DISCLAIMER] Saya adalah penulis utilitas [/ DISCLAIMER]
Contoh:
// 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
Seperti yang Anda lihat, nilai-nilai primitif dihormati, dan Anda dapat membuat beberapa instance untuk mengontrol penyimpanan Anda.
Ini tersedia di mana saja di domain itu seperti yang disarankan Nick, sebagai alternatif ada sessionStorage bekerja sedikit berbeda karena berbeda dengan jendela browser itu sendiri. Artinya, tab atau jendela lain di domain yang sama tidak memiliki akses ke salinan yang sama dari objek penyimpanan.