कुकी को समझना

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

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

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

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

कुकी का इस्तेमाल किया जा रहा है

मान लें कि आपके पास एक ब्लॉग है, जहां आपको अपने उपयोगकर्ताओं को "नया क्या है" प्रोमो दिखाना है. उपयोगकर्ता, प्रोमो को खारिज कर सकते हैं. इसके बाद, वे कुछ समय तक इसे दोबारा नहीं देख पाएंगे. उस प्राथमिकता को कुकी में सेव किया जा सकता है और एक महीने (26,00,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 एट्रिब्यूट सेट किया जा सकता है.

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