कुकी, ब्राउज़र में सेव किया गया डेटा होता है. इसका इस्तेमाल, वेबसाइट की स्थिति और अन्य जानकारी को बनाए रखने के लिए किया जाता है. इससे वेबसाइट को अपनी सुविधाएं चलाने में मदद मिलती है.
कुकी एक छोटी फ़ाइल होती है. वेबसाइटें इसे अपने उपयोगकर्ता के डिवाइस पर सेव करती हैं. इसमें सेव की गई जानकारी, ब्राउज़र और वेबसाइट के बीच ट्रांसफ़र होती है.
हर कुकी, की-वैल्यू पेयर होती है. साथ ही, इसमें कई एट्रिब्यूट होते हैं. ये एट्रिब्यूट यह कंट्रोल करते हैं कि कुकी का इस्तेमाल कब और कहां किया जाए. इन एट्रिब्यूट का इस्तेमाल, कुकी की समयसीमा खत्म होने की तारीखें सेट करने या यह बताने के लिए किया जाता है कि कुकी को सिर्फ़ एचटीटीपीएस पर भेजा जाना चाहिए. एचटीटीपी हेडर में या 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"
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 एट्रिब्यूट सेट करके, कुकी के इस्तेमाल का मकसद साफ़ तौर पर बताया जा सकता है.
अपनी पहले-पक्ष की कुकी की पहचान करने और सही एट्रिब्यूट सेट करने के लिए, पहले-पक्ष की कुकी के उदाहरण देखें.