HTML5 में, प्रति पृष्ठ / डोमेन में लोकलस्टोरेज ऑब्जेक्ट अलग-थलग है?


172

क्या HTML5 लोकलस्टोरेज ऑब्जेक्ट प्रति पेज / डोमेन से अलग है? मैं सोच रहा हूं कि मैं लोकलस्टोरीज की चाबियां कैसे बनाऊंगा। क्या मुझे एक अलग उपसर्ग की आवश्यकता है? या जो मैं चाहता हूं, क्या मैं उनका नाम ले सकता हूं?


मैं हमेशा एक उपसर्ग का उपयोग करूँगा, बस उपयोगकर्ता स्क्रिप्ट के साथ संभावित टकराव से बचने के लिए - जो स्थानीयस्टोरेज का भी उपयोग कर सकता है।
बेंजोल

IMO यह उपयोगकर्ता स्क्रिप्ट है जो टकराव से बचना चाहिए, न कि पृष्ठों से। मेरी उपयोगकर्ता स्क्रिप्ट में मैं स्क्रिप्ट के नाम से उपसर्ग का उपयोग कर रहा हूं।
कैमिलो मार्टिन

जवाबों:


195

यह प्रति डोमेन और पोर्ट ( समान मूल नीति के समान समान नियम ) है, इसे प्रति पृष्ठ बनाने के लिए आपको एक कुंजी locationया किसी अन्य दृष्टिकोण के आधार पर उपयोग करना होगा ।

आप एक उपसर्ग की जरूरत नहीं है , एक का उपयोग करें यदि आप इसे जरूरत है, हालांकि। इसके अलावा, हाँ, आप उन्हें जो चाहें नाम दे सकते हैं।


77
यह प्रति protocol://host:portसंयोजन अद्वितीय है ।
थैसमो

1
www.mysite.it:8012/App1 और www.mysite.it:8012/App2 में स्थानीय भंडारण है?
DarioN1

3
@ DarioN1 हाँ, www.mysite.it:8012/App1 और www.mysite.it:8012/App2 ने स्थानीय भंडारण साझा किया है। (कैविएट: यदि आप उन्हें अलग-अलग प्रोटोकॉल, ईजी http बनाम https से एक्सेस करते हैं, तो वे साझा नहीं किए जाते हैं। एक ही प्रोटोकॉल, सबडोमेन, डोमेन और पोर्ट के भीतर - वे साझा किए जाते हैं। यह 'ओरिजिन' की अवधारणा का सरलीकरण है। )
विलियम

31

भंडार प्रति मूल हैं , जहां "मूल" समान उत्पत्ति नीति (स्कीमा [ 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


3
यह बहुत लिखा गया था, इस जवाब को सबसे अधिक पसंद किया क्योंकि यह पढ़ना आसान है और पूरी तरह से समझाया गया है, यहां तक ​​कि उन लोगों के लिए भी जो अभी-अभी विकास शुरू करेंगे।
baHI

1
+1 यह उल्लेख करने के लिए कि "वेब स्टोरेज में निर्मित कोई तंत्र नहीं है जो एक मूल को दूसरे के भंडारण तक पहुंचने की अनुमति देता है।"
फबिएन क्वात्रावाक्स

7

हाँ, प्रत्येक डोमेन / उपडोमेन में एक अलग लोकलस्टोरेज होता है और आप जो चाहें (जिसे उपसर्ग आवश्यक नहीं है) कुंजी कह सकते हैं।

कुंजी प्राप्त करने के लिए आप विधि कुंजी (इंडेक्स) का उपयोग कर सकते हैं जैसे

localStorage.key(0);

एक वस्तु थी जिसे ग्लोबलस्टोरेज कहा जाता है, जहां आप कई स्थानीय स्टॉरेज कर सकते हैं, लेकिन इसे ऐनक से हटा दिया गया है


7

जैसा कि अन्य ने बताया है, लोकलस्टोरेज प्रति प्रोटोकॉल, होस्ट और पोर्ट के लिए अद्वितीय है। यदि आप उपसर्ग कीज़ के साथ अपने स्टोरेज को नियंत्रित करने का आसान तरीका चाहते हैं, तो मैं सुझाव देता हूं कि लोकलडॉटस्टोरेज

न केवल यह एक ही डोमेन के भीतर कुंजियों को साझा करने से पहले कुंजी को संकलित करने में मदद करता है, यह पारदर्शी रूप से जावास्क्रिप्ट डेटा प्रकारों (एरे, बूलियन, दिनांक, फ्लोट, इंटेगर, स्ट्रिंग और ऑब्जेक्ट) को संग्रहीत करता है, हल्के से स्थिरीकरण प्रदान करता है, स्वचालित रूप से स्ट्रिंग्स को संपीड़ित करता है, और कुंजी (नाम) के साथ-साथ क्वेरी (कुंजी) मान द्वारा क्वेरी की सुविधा देता है।

[अस्वीकरण] मैं उपयोगिता का लेखक हूं [/ DISCLAIMER]

उदाहरण:

// 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

जैसा कि आप देख सकते हैं, आदिम मूल्यों का सम्मान किया जाता है, और आप अपने भंडारण को नियंत्रित करने के लिए कई उदाहरण बना सकते हैं।


0

यह उस डोमेन पर कहीं भी उपलब्ध है जैसा कि निक ने सुझाव दिया था, एक विकल्प के रूप में सेशनस्टोरेज थोड़ा अलग तरीके से काम करता है कि यह ब्राउज़र विंडो के लिए अलग है। कहने का तात्पर्य यह है कि एक ही डोमेन के अन्य टैब या विंडो में स्टोरेज ऑब्जेक्ट की समान कॉपी तक पहुंच नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.