2010-11-17 18 views

回答

135

它是每個域名(與same origin policy相同的隔離規則),爲了使它每頁都必須使用基於location的密鑰或其他方法。

你不要需要一個前綴,如果你需要的話可以使用一個前綴。另外,是的,你可以將它們命名爲任何你想要的。

+1

正是我所需要的。 – 2010-11-18 01:11:34

+34

根據協議:// host:port'組合,它是唯一的。 – Thasmo 2016-02-03 23:48:20

+4

我在這裏評論以確認知道該端口在範圍界定中是有用的。考慮一下:dev服務器,'localhost'。 – 2016-09-04 02:38:46

8

是的,每個域/子域有不同的localStorage,你可以調用任何你想要的密鑰(不需要前綴)。

要一鍵搞定,你可以使用的方法鍵(指數)如

localStorage.key(0); 

有所謂globalStorage的在那裏你可以有多個localStorages前一個對象,但它已經從規格

棄用
5

我總是使用前綴,以避免與用戶腳本的潛在衝突 - 也可能使用localStorage。

+11

IMO這是應避免碰撞的用戶腳本,而不是頁面。在我的用戶腳本中,我使用了一個以腳本命名的前綴。 – 2012-02-18 04:43:38

0

尼克建議,它可以在該域的任何地方使用,作爲另一種選擇,sessionStorage的作用略有不同,因爲它與瀏覽器窗口本身不同。也就是說,同一個域上的其他選項卡或窗口不能訪問存儲對象的同一副本。

9

的商店是每原點,其中原點相同的Same Origin Policy(一個模式[httphttps,等],端口和主機的組合)。 From the spec

每個頂級瀏覽上下文都有一組唯一的會話存儲區域,每個來源一個。

因此,http://a.example.com儲存和爲http://b.example.com存儲是分開的(和他們都是從http://stackoverflow.com分開)的那些都不同的主機。同樣,http://example.com:80http://example.com:8080https://example.com都是不同的來源。

Web存儲中沒有內置機制允許一個來源訪問另一個來源的存儲。

注意它的起源,而不是URL,那麼http://example.com/page1http://example.com/page2都能訪問的存儲的http://example.com

3

正如其他人指出的,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 

正如你所看到的,原始的價值得到尊重,你可以創建多個實例來控制你的存儲。

相關問題