स्टोरेज और कुकी

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

एक्सटेंशन एपीआई के बारे में जानकारी के लिए, browser.storage देखें.

स्टोरेज

एक्सटेंशन में, वेब प्लैटफ़ॉर्म स्टोरेज एपीआई का इस्तेमाल करना अक्सर फ़ायदेमंद होता है. इस सेक्शन में, एक्सटेंशन के संदर्भ में इन एपीआई के व्यवहार के बारे में बताया गया है. यह कभी-कभी वेब पर इनके व्यवहार से अलग हो सकता है.

परसिस्टेंस

जब कोई उपयोगकर्ता ब्राउज़िंग डेटा मिटाता है, तब एक्सटेंशन स्टोरेज नहीं मिटता. यह वेब स्टोरेज एपीआई (जैसे, लोकल स्टोरेज और IndexedDB) का इस्तेमाल करके सेव किए गए किसी भी डेटा पर लागू होता है.

डिफ़ॉल्ट रूप से, एक्सटेंशन पर स्टोरेज के लिए कोटा से जुड़ी सामान्य पाबंदियां लागू होती हैं. इनकी जांच करने के लिए, navigator.storage.estimate() को कॉल करें. मेमोरी पर ज़्यादा दबाव पड़ने पर भी स्टोरेज को हटाया जा सकता है. हालांकि, ऐसा बहुत कम होता है. इससे बचने के लिए:

  • "unlimitedStorage" अनुमति का अनुरोध करें. इससे एक्सटेंशन और वेब स्टोरेज, दोनों के एपीआई पर असर पड़ता है. साथ ही, एक्सटेंशन को कोटे से जुड़ी पाबंदियों और डेटा मिटाने से छूट मिलती है.
  • घर से बेदखल किए जाने से बचने के लिए, navigator.storage.persist() पर कॉल करें.

एक्सटेंशन के स्टोरेज को एक्सटेंशन के ऑरिजिन के साथ शेयर किया जाता है. इसमें एक्सटेंशन सर्विस वर्कर, एक्सटेंशन के सभी पेज (पॉप-अप और साइड पैनल शामिल हैं) और ऑफ़स्क्रीन दस्तावेज़ शामिल हैं. कॉन्टेंट स्क्रिप्ट में, वेब स्टोरेज एपीआई को कॉल करने पर, उस होस्ट पेज का डेटा ऐक्सेस किया जाता है जिस पर कॉन्टेंट स्क्रिप्ट डाली गई है. एक्सटेंशन का डेटा ऐक्सेस नहीं किया जाता.

सर्विस वर्कर में ऐक्सेस

IndexedDB और Cache Storage एपीआई, सर्विस वर्कर में ऐक्सेस किए जा सकते हैं. हालांकि, लोकल स्टोरेज और सेशन स्टोरेज ऐसा नहीं करते.

अगर आपको सर्विस वर्कर से लोकल स्टोरेज या सेशन स्टोरेज को ऐक्सेस करना है, तो ऑफ़स्क्रीन दस्तावेज़ का इस्तेमाल करें.

पार्टिशन करना

पार्टिशनिंग में, सेव किए गए डेटा के लिए कुंजियां बनाई जाती हैं. इससे यह तय किया जा सकता है कि डेटा को कहां ऐक्सेस किया जा सकता है. स्टोरेज को पहले ऑरिजिन के हिसाब से बांटा जाता था.

Chrome 115 से, स्टोरेज पार्टीशनिंग की सुविधा में बदलाव किए गए हैं. इससे यह तय किया जाता है कि पार्टीशनिंग कुंजियों को कैसे तय किया जाए, ताकि कुछ तरह की क्रॉस-साइट ट्रैकिंग को रोका जा सके. इसका मतलब यह है कि अगर साइट A, साइट B को शामिल करने वाला कोई iframe एंबेड करती है, तो साइट B उस स्टोरेज को ऐक्सेस नहीं कर पाएगी जिसे वह आम तौर पर सीधे तौर पर नेविगेट करने पर ऐक्सेस करती है.

एक्सटेंशन पर इसका असर कम करने के लिए, दो तरह की छूट दी गई हैं:

  • अगर chrome-extension:// स्कीम वाले पेज को किसी साइट में एम्बेड किया जाता है, तो स्टोरेज का पार्टीशन करने की सुविधा लागू नहीं होगी. साथ ही, एक्सटेंशन के पास अपने टॉप-लेवल पार्टीशन का ऐक्सेस होगा.
  • अगर chrome-extension:// स्कीम वाले किसी पेज में iframe शामिल है और एक्सटेंशन के पास उस साइट के लिए होस्ट अनुमतियां हैं जिसे वह एम्बेड कर रहा है, तो उस साइट के पास भी अपने टॉप-लेवल पार्टीशन का ऐक्सेस होगा.

कुकी

कुकी, किसी खास डोमेन और पाथ से जुड़ी की-वैल्यू पेयर को सेव करने का तरीका उपलब्ध कराती हैं. एक्सटेंशन में इनकी वैल्यू सीमित होती है. हालांकि, अगर आपके पास इस्तेमाल का कोई खास उदाहरण है या आपने किसी तीसरे पक्ष की ऐसी स्क्रिप्ट बंडल की है जो इन्हें लागू करने के लिए इस्तेमाल करती है, तो इनके व्यवहार को समझना आपके लिए फ़ायदेमंद हो सकता है.

सुरक्षित कुकी

Secure कुकी एट्रिब्यूट, सिर्फ़ https:// स्कीम के लिए इस्तेमाल किया जा सकता है. इसलिए, chrome-extension:// पेजों पर इस एट्रिब्यूट के साथ कुकी सेट नहीं की जा सकतीं.

इसका यह भी मतलब है कि एक्सटेंशन पेज, कुकी के ऐसे अन्य एट्रिब्यूट का इस्तेमाल नहीं कर सकते जिनके लिए Secure एट्रिब्यूट ज़रूरी है:

कुकी को हिस्सों में बांटना और SameSite व्यवहार

chrome-extension:// पेजों पर सेट की गई कुकी हमेशा SameSite=Lax का इस्तेमाल करती हैं. इसलिए, एक्सटेंशन के अपने ऑरिजिन पर सेट की गई कुकी को कभी भी फ़्रेम में ऐक्सेस नहीं किया जा सकता. साथ ही, पार्टीशनिंग भी काम की नहीं होती.

तीसरे पक्ष की साइटों से जुड़ी कुकी के लिए, कुकी का व्यवहार वेब जैसा ही होता है. जैसे, एक्सटेंशन पेज पर फ़्रेम में लोड की गई तीसरे पक्ष की साइट या एक्सटेंशन पेज से तीसरे पक्ष के ऑरिजिन को किया गया अनुरोध. हालांकि, कुकी का व्यवहार दो मामलों में अलग होता है:

  • अगर किसी टैब का टॉप-लेवल पेज chrome-extension:// पेज है, तो सबफ़्रेम में भी तीसरे पक्ष की कुकी कभी ब्लॉक नहीं की जातीं.
  • अगर एक्सटेंशन के पास तीसरे पक्ष के लिए होस्ट अनुमतियां हैं, तो तीसरे पक्ष को एक्सटेंशन से किए गए अनुरोधों को एक ही साइट से किए गए अनुरोध माना जाता है. इसका मतलब है कि SameSite=Strict कुकी भेजी जा सकती हैं. ध्यान दें कि यह सिर्फ़ नेटवर्क अनुरोधों पर लागू होता है. JavaScript में document.cookie के ज़रिए ऐक्सेस करने पर लागू नहीं होता. साथ ही, अगर तीसरे पक्ष की कुकी ब्लॉक की जाती हैं, तो यह लागू नहीं होता.

ध्यान दें कि तीसरे पक्ष की कुकी से जुड़ी सेटिंग पर, Privacy Sandbox के काम का असर पड़ता है. साथ ही, इन्हें Privacy Sandbox की टाइमलाइन के हिसाब से अडजस्ट किया जाता है.

browser.cookies एपीआई, हर एपीआई तरीके के साथ इस्तेमाल की जाने वाली पार्टीशन कुंजी को कंट्रोल करने की सुविधा देता है. ज़्यादा जानकारी के लिए, एपीआई का संदर्भ देखें.