← Back to HTML Course | Chapter 7: Advanced APIs & Features | Lesson 5 of 11

HTML Web Storage

सोचिए आप एक ऑनलाइन बुकस्टोर पर गए हैं। आप अपने कार्ट में कुछ किताबें जोड़ते हैं, लेकिन गलती से टैब बंद कर देते हैं। जब आप पेज दोबारा खोलते हैं, तो आप उम्मीद करते हैं कि आपकी किताबें अब भी कार्ट में मौजूद हों, खरीदने के लिए तैयार। HTML Web Storage बिल्कुल यही करता है। यह आपके ब्राउज़र के अंदर एक सुरक्षित, बिल्ट-इन स्टोरेज कंटेनर है, जो वेबसाइट्स को छोटे-छोटे डेटा टुकड़े (जैसे सेटिंग्स, थीम्स, या कार्ट आइटम्स) सीधे आपकी डिवाइस पर सेव करने देता है। पारंपरिक कुकीज़ के मुकाबले, web storage कहीं ज़्यादा तेज़, ज़्यादा सुरक्षित है, और आपकी वेबसाइट को धीमा किए बिना कहीं ज़्यादा डेटा रख सकता है।
Syntax
markup
localStorage.setItem("key", "value");
localStorage.getItem("key");
localStorage.removeItem("key");

Web Storage क्या है?

Web Storage एक स्टैंडर्ड ब्राउज़र API है जिसे डेटा को साधारण key-value पेयर्स के रूप में लोकल रूप से सेव करने के लिए डिज़ाइन किया गया है।

यह असंवेदनशील डेटा स्टोर करने के लिए पारंपरिक कुकीज़ की जगह लेता है, और इसमें बेहतर परफॉर्मेंस, बेहतर सिक्योरिटी, और कहीं ज़्यादा स्टोरेज क्षमता (5MB तक) मिलती है।

Note: Web storage का उपयोग सिर्फ असंवेदनशील सेटिंग्स सेव करने के लिए करें; कभी भी पासवर्ड या क्रेडिट कार्ड नंबर जैसा संवेदनशील डेटा स्टोर न करें।
Warning: Web storage का डेटा ब्राउज़र के अंदर plain text के रूप में सेव होता है, जिससे डिवाइस तक पहुंच रखने वाला कोई भी व्यक्ति इसे एक्सेस कर सकता है।

उदाहरण: What is Web Storage?

markup
<script>
  localStorage.setItem('username', 'Alex');
</script>

localStorage से Persistent Storage

localStorage ऑब्जेक्ट यूज़र के डिवाइस पर डेटा को स्थायी रूप से सेव करता है। इस डेटा की कोई एक्सपायरी डेट नहीं होती; यह तब भी सेव रहता है जब यूज़र अपने टैब बंद करे, ब्राउज़र रीस्टार्ट करे, या डिवाइस शटडाउन करे।

Note: डार्क मोड सेटिंग्स जैसी यूज़र प्रेफरेंस को विज़िट्स के बीच बनाए रखने के लिए localStorage का उपयोग करें।
Warning: localStorage का ज़रूरत से ज़्यादा इस्तेमाल करने से बचें, क्योंकि सही मैनेजमेंट न होने पर यह ब्राउज़र का स्टोरेज कोटा भर सकता है।

उदाहरण: Persistent Storage with localStorage

markup
<script>
  localStorage.setItem('theme', 'dark');
  console.log(localStorage.getItem('theme'));
</script>

sessionStorage से Temporary Storage

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

Note: अस्थायी फॉर्म प्रोग्रेस या सिंगल-सेशन एनालिटिक्स डेटा स्टोर करने के लिए sessionStorage का उपयोग करें।
Warning: अगर यूज़र एक्टिव टैब को डुप्लीकेट या बंद कर देता है, तो sessionStorage में सेव डेटा खो जाएगा।

उदाहरण: Temporary Storage with sessionStorage

markup
<script>
  sessionStorage.setItem('formProgress', 'step2');
  console.log(sessionStorage.getItem('formProgress'));
</script>

JSON का उपयोग करके स्ट्रक्चर्ड डेटा सेव करना

Web Storage सिर्फ साधारण स्ट्रिंग्स के रूप में डेटा स्टोर कर सकता है। कॉम्प्लेक्स डेटा स्ट्रक्चर्स (जैसे arrays या objects) सेव करने के लिए, आपको सेव करने से पहले JSON.stringify का उपयोग करके उन्हें JSON स्ट्रिंग में बदलना होगा, और वापस पाते समय JSON.parse से उन्हें पार्स करना होगा।

Note: एक ही key में यूज़र सेटिंग्स या सर्च हिस्ट्री के कॉम्प्लेक्स arrays सेव करने के लिए JSON एन्कोडिंग का उपयोग करें।
Warning: raw JavaScript ऑब्जेक्ट्स को JSON में बदले बिना सीधे सेव करने की कोशिश करने पर एक अपठनीय '[object Object]' स्ट्रिंग सेव हो जाएगी।

उदाहरण: Saving Structured Data using JSON

markup
<script>
  const settings = { theme: 'dark', fontSize: 16 };
  localStorage.setItem('settings', JSON.stringify(settings));
  const saved = JSON.parse(localStorage.getItem('settings'));
</script>

स्टोरेज स्पेस को क्लियर और मैनेज करना

अपने स्टोरेज स्पेस को व्यवस्थित रखने और ब्राउज़र की सीमाओं के भीतर रहने के लिए, आपको नियमित रूप से पुराने या अनुपयोगी डेटा को साफ करते रहना चाहिए। आप removeItem का उपयोग करके specific आइटम्स डिलीट कर सकते हैं, या clear मेथड से पूरे स्टोरेज एरिया को साफ कर सकते हैं।

Note: यूज़र्स को आसानी से अपनी सेव की गई प्रेफरेंस साफ करने देने के लिए अपने पेज पर एक सिंपल रीसेट बटन दें।
Warning: clear मेथड कॉल करने पर आपकी वेबसाइट द्वारा स्टोर किया गया सारा डेटा डिलीट हो जाएगा, इसलिए इसका उपयोग सावधानी से करें।

उदाहरण: Clearing and Managing Storage Space

markup
<script>
  localStorage.removeItem('theme');
  localStorage.clear();
</script>

प्रति ब्राउज़र स्टोरेज सीमाएँ

ज़्यादातर मॉडर्न ब्राउज़र localStorage और sessionStorage दोनों के लिए प्रति origin लगभग 5 से 10 मेगाबाइट स्टोरेज की अनुमति देते हैं, हालांकि Chrome, Firefox और Safari के बीच सटीक सीमा थोड़ी अलग-अलग होती है।

यह सेटिंग्स और छोटे कैश्ड डेटा के लिए पर्याप्त है, लेकिन बड़ी फाइल्स या मीडिया स्टोर करने के लिए बहुत कम है।

Note: कुछ मेगाबाइट से बड़े किसी भी डेटा के लिए, IndexedDB का इस्तेमाल देखें, जो कहीं ज़्यादा बड़े स्टोरेज कोटा को सपोर्ट करता है।
Warning: स्टोरेज लिमिट पार करने पर QuotaExceededError आता है, जो अगर आप catch नहीं करते तो आपकी स्क्रिप्ट को क्रैश कर देगा।

उदाहरण: Storage Limits Per Browser

markup
<script>
  try {
    localStorage.setItem('data', 'x'.repeat(10000000));
  } catch (e) {
    console.log('QuotaExceededError:', e.message);
  }
</script>

Storage Events सुनना

storage इवेंट उसी साइट के दूसरे खुले टैब्स या विंडोज़ में तब फायर होता है जब उनमें से किसी एक में localStorage बदलता है, जिससे आप कई टैब्स को सिंक में रख सकते हैं।

खास बात यह है कि यह इवेंट उसी टैब में फायर नहीं होता जिसने बदलाव किया, बल्कि सिर्फ उसी origin को सुनने वाले दूसरे टैब्स में फायर होता है।

Note: अपनी साइट के कई खुले टैब्स में लॉग्ड-इन स्टेट या शॉपिंग कार्ट जैसी चीज़ों को तुरंत सिंक करने के लिए storage इवेंट का उपयोग करें।
Warning: चूंकि storage इवेंट उस टैब में फायर नहीं होता जिसने बदलाव किया है, इसलिए आप इसका उपयोग अपने ही मौजूदा टैब की स्क्रिप्ट से किए गए बदलावों का पता लगाने के लिए नहीं कर सकते।

उदाहरण: Listening for Storage Events

markup
<script>
  window.addEventListener('storage', function (event) {
    console.log(event.key, event.newValue);
  });
</script>

Cookies बनाम localStorage

कुकीज़ हर एक HTTP रिक्वेस्ट के साथ अपने-आप सर्वर को भेजी जाती हैं, इनकी साइज़ सीमा लगभग 4 किलोबाइट्स जितनी बहुत छोटी होती है, और इनकी एक एक्सपायरी डेट हो सकती है। localStorage कभी अपने-आप सर्वर को नहीं भेजा जाता, इसमें कहीं ज़्यादा डेटा रखा जा सकता है, और यह स्पष्ट रूप से क्लियर न किए जाने तक बना रहता है, जिससे यह UI प्रेफरेंस जैसे सिर्फ client-only डेटा के लिए कहीं ज़्यादा उपयुक्त है।

Note: कुकीज़ का उपयोग सिर्फ उस डेटा के लिए करें जिसे सर्वर को वाकई देखना ज़रूरी है, जैसे authentication tokens, और सिर्फ ब्राउज़र के अपने उपयोग वाले सारे डेटा के लिए localStorage का उपयोग करें।
Warning: localStorage में संवेदनशील डेटा स्टोर करना कुकीज़ की तुलना में अपने आप में ज़्यादा सुरक्षित नहीं है — दोनों को पेज पर चल रही कोई भी JavaScript पढ़ सकती है, इसलिए किसी में भी plain sensitive secrets नहीं रखने चाहिए।

उदाहरण: Cookies vs localStorage

markup
<script>
  document.cookie = "token=abc123";
  localStorage.setItem('uiTheme', 'dark');
</script>
Live Example
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.