कुकी को समझना

कुकी, ब्राउज़र में सेव किया गया डेटा होता है. इसका इस्तेमाल, वेबसाइट की सेटिंग और अन्य जानकारी को सेव करने के लिए किया जाता है. वेबसाइट को अपनी सुविधाएं लागू करने के लिए, इस जानकारी की ज़रूरत होती है.

कुकी एक छोटी फ़ाइल होती है. वेबसाइटें, इसे उपयोगकर्ताओं के कंप्यूटर पर सेव करती हैं. इसमें सेव की गई जानकारी, ब्राउज़र और वेबसाइट के बीच भेजी और पाई जाती है.

हर कुकी, की-वैल्यू पेयर होती है. साथ ही, इसमें कई एट्रिब्यूट होते हैं, जो यह कंट्रोल करते हैं कि कुकी का इस्तेमाल कब और कहां किया जाए. इन एट्रिब्यूट का इस्तेमाल, खत्म होने की तारीख सेट करने या यह बताने के लिए किया जाता है कि कुकी सिर्फ़ एचटीटीपीएस पर भेजी जानी चाहिए. एचटीटीपी हेडर या JavaScript इंटरफ़ेस की मदद से, कुकी सेट की जा सकती है.

कुकी, वेबसाइटों पर स्थायी स्थिति जोड़ने के उपलब्ध तरीकों में से एक हैं. सालों से, इनकी सुविधाओं में काफ़ी सुधार हुए हैं. हालांकि, इनकी वजह से प्लैटफ़ॉर्म पर कुछ समस्याएं भी हुई हैं. इसे ठीक करने के लिए, ब्राउज़र (इनमें Chrome, Firefox, और Edge शामिल हैं) अपने व्यवहार में बदलाव कर रहे हैं, ताकि निजता बनाए रखने की ज़्यादा डिफ़ॉल्ट सेटिंग लागू की जा सके.

कुकी का इस्तेमाल

मान लें कि आपके पास एक ब्लॉग है, जहां आपको अपने उपयोगकर्ताओं को "नया क्या है" प्रमोशन दिखाना है. उपयोगकर्ता प्रमोशन को खारिज कर सकते हैं. इसके बाद, उन्हें कुछ समय तक यह प्रमोशन नहीं दिखेगा. उस प्राथमिकता को कुकी में सेव किया जा सकता है और उसे एक महीने (2,600,000 सेकंड) में खत्म होने के लिए सेट किया जा सकता है. साथ ही, उसे सिर्फ़ एचटीटीपीएस पर भेजा जा सकता है. वह हेडर कुछ ऐसा दिखेगा:

Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
रिस्पॉन्स में, सर्वर से ब्राउज़र पर भेजी जा रही तीन कुकी
सर्वर, Set-Cookie हेडर का इस्तेमाल करके कुकी सेट करते हैं.

जब आपका पाठक उन ज़रूरी शर्तों को पूरा करने वाला पेज देखता है—जैसे, वह सुरक्षित कनेक्शन पर है और कुकी एक महीने से कम पुरानी है—तो उसका ब्राउज़र अपने अनुरोध में यह हेडर भेजेगा:

Cookie: promo_shown=1
अनुरोध में, ब्राउज़र से सर्वर पर भेजी जा रही तीन कुकी
आपका ब्राउज़र, Cookie हेडर में कुकी वापस भेजता है.

document.cookie का इस्तेमाल करके, JavaScript में उस साइट के लिए उपलब्ध कुकी भी जोड़ी और पढ़ी जा सकती हैं. document.cookie को असाइन करने पर, उस कुंजी से कुकी बन जाएगी या बदल जाएगी. उदाहरण के लिए, अपने ब्राउज़र के JavaScript कंसोल में ये आज़माएं:

→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"

document.cookie को पढ़ने पर, मौजूदा कॉन्टेक्स्ट में ऐक्सेस की जा सकने वाली सभी कुकी का आउटपुट मिलेगा. साथ ही, हर कुकी को सेमीकोलन से अलग किया जाएगा:

→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
ब्राउज़र में कुकी ऐक्सेस करने वाला JavaScript
JavaScript, document.cookie का इस्तेमाल करके कुकी ऐक्सेस कर सकता है.

अगर आप इसे कुछ चुनिंदा लोकप्रिय साइटों पर आज़माते हैं, तो आप देखेंगे कि उनमें से ज़्यादातर साइटें तीन से ज़्यादा कुकी सेट करती हैं. ज़्यादातर मामलों में, उन कुकी को उस डोमेन के हर अनुरोध पर भेजा जाता है. इससे कई तरह के असर पड़ते हैं. आम तौर पर, आपके उपयोगकर्ताओं के लिए अपलोड बैंडविड्थ, डाउनलोड बैंडविड्थ के मुकाबले ज़्यादा सीमित होती है. इसलिए, सभी आउटबाउंड अनुरोधों के ओवरहेड की वजह से, पहले बाइट में लगने वाला समय बढ़ जाता है. सेट की जाने वाली कुकी की संख्या और साइज़ को कम रखें. Max-Age एट्रिब्यूट का इस्तेमाल करें, ताकि यह पक्का किया जा सके कि कुकी ज़रूरत से ज़्यादा समय तक सेव न रहें.

पहले और तीसरे पक्ष की कुकी क्या होती हैं?

अगर आपने उन साइटों पर वापस जाना है जिन्हें आपने पहले देखा था, तो आपको पता चलेगा कि उन साइटों के अलावा, कई अन्य डोमेन के लिए भी कुकी मौजूद थीं. मौजूदा साइट के डोमेन से मेल खाने वाली कुकी, यानी ब्राउज़र के पता बार में दिखने वाली कुकी को पहले पक्ष की कुकी कहा जाता है. इसी तरह, मौजूदा साइट के अलावा अन्य डोमेन की कुकी को तीसरे पक्ष की कुकी कहा जाता है. यह कोई ज़रूरी लेबल नहीं है, बल्कि यह उपयोगकर्ता के कॉन्टेक्स्ट पर निर्भर करता है. एक ही कुकी, पहले पक्ष या तीसरे पक्ष की हो सकती है. यह इस बात पर निर्भर करता है कि उपयोगकर्ता उस समय किस साइट पर है.

एक ही पेज पर अलग-अलग अनुरोधों से, ब्राउज़र को भेजी जा रही तीन कुकी
एक पेज पर कई अलग-अलग डोमेन से कुकी मिल सकती हैं.

ऊपर दिए गए उदाहरण को जारी रखते हुए, मान लें कि आपकी किसी ब्लॉग पोस्ट में एक बहुत ही शानदार बिल्ली की इमेज है और उसे /blog/img/amazing-cat.png पर होस्ट किया गया है. यह इमेज इतनी शानदार है कि कोई दूसरा व्यक्ति, सीधे अपनी साइट पर इसका इस्तेमाल करता है. अगर कोई व्यक्ति आपके ब्लॉग पर आया है और उसके पास promo_shown कुकी है, तो जब वह किसी दूसरे व्यक्ति की साइट पर amazing-cat.png देखेगा, तो इमेज के लिए किए गए अनुरोध में वह कुकी भेजी जाएगी. यह किसी के लिए भी खास तौर पर फ़ायदेमंद नहीं है, क्योंकि promo_shown का इस्तेमाल, इस दूसरे व्यक्ति की साइट पर किसी भी काम के लिए नहीं किया जाता है. यह सिर्फ़ अनुरोध में ओवरहेड जोड़ रहा है.

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

एक ही कुकी को तीन अलग-अलग संदर्भों में भेजा जा रहा है
अलग-अलग पेजों पर जाने पर, तीसरे पक्ष के कॉन्टेक्स्ट में कुकी भेजी जाती है.

वेब की सांस्कृतिक प्रॉपर्टी में से एक यह है कि यह डिफ़ॉल्ट रूप से खुला रहता है. इस वजह से, ज़्यादा से ज़्यादा लोग वहां अपना कॉन्टेंट और ऐप्लिकेशन बना पाते हैं. हालांकि, इससे सुरक्षा और निजता से जुड़ी कई समस्याएं भी पैदा हुई हैं. किसी दूसरी साइट से किए गए फ़र्ज़ी अनुरोध (सीएसआरएफ़) वाले हमले, इस बात पर निर्भर करते हैं कि कुकी किसी दिए गए ऑरिजिन के किसी भी अनुरोध से जुड़ी होती हैं. भले ही, अनुरोध करने वाला कोई भी हो. उदाहरण के लिए, evil.example पर जाने से, your-blog.example के लिए अनुरोध ट्रिगर हो सकते हैं. साथ ही, आपका ब्राउज़र उससे जुड़ी कुकी को अटैच कर देगा. अगर आपका ब्लॉग इन अनुरोधों की पुष्टि करने के तरीके को लेकर सावधान नहीं है, तो evil.example पोस्ट मिटाने या अपना कॉन्टेंट जोड़ने जैसी कार्रवाइयां ट्रिगर कर सकता है.

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

SameSite एट्रिब्यूट की सही वैल्यू सेट करके, कुकी के लिए अपने इंटेंट के बारे में साफ़ तौर पर बताया जा सकता है.

अपनी पहले-पक्ष की कुकी की पहचान करने और सही एट्रिब्यूट सेट करने के लिए, पहले-पक्ष की कुकी रेसिपी देखें.