जब कोई वेब सर्वर, किसी संसाधन के अनुरोध का जवाब देता है, तो सर्वर अपने जवाब के साथ Set-Cookie हेडर शामिल कर सकता है. यह हेडर, आपके ब्राउज़र को कुकी सेव करने के लिए कहता है. उदाहरण के लिए: Set-Cookie:cat=tabby.
कुकी क्या होती हैं? लेख में बताया गया है कि कुकी कैसे काम करती हैं.
कुकी का नाम और वैल्यू देने के अलावा, Set-Cookie में ऐसे एट्रिब्यूट शामिल किए जा सकते हैं जिनसे यह कंट्रोल किया जा सके कि कुकी सेट की गई हैं या नहीं. साथ ही, यह भी कंट्रोल किया जा सकता है कि वे कब खत्म होंगी. कुकी के एट्रिब्यूट को सेमीकोलन से अलग किया जाता है. उदाहरण के लिए:
Set-Cookie:cat=tabby; Secure; HTTPOnly; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
इस दस्तावेज़ में, कुकी के सबसे अहम एट्रिब्यूट के बारे में बताया गया है:
एचटीटीपी कुकी का इस्तेमाल करना लेख में, कुकी एट्रिब्यूट के बारे में ज़्यादा तकनीकी जानकारी दी गई है.
सुरक्षित
अगर किसी Set-Cookie हेडर में Secure शामिल है, तो कुकी को सिर्फ़ उन एन्क्रिप्ट किए गए अनुरोधों के साथ शामिल किया जाएगा जो एचटीटीपीएस प्रोटोकॉल का इस्तेमाल करते हैं: कुकी को एचटीटीपी अनुरोधों में शामिल नहीं किया जाएगा. इससे इंटरमीडियरी हमलों को रोकने में मदद मिल सकती है. इनमें हमलावर, ब्राउज़र और सर्वर के बीच होने वाले कम्यूनिकेशन में चुपके से दख़ल देता है, ताकि जानकारी को आगे बढ़ाया जा सके और उसमें बदलाव किया जा सके.
HTTPOnly
अगर Set-Cookie हेडर में HTTPOnly शामिल है, तो JavaScript कुकी को ऐक्सेस नहीं कर सकती. उदाहरण के लिए, document.cookie का इस्तेमाल करके. इससे कुकी को टारगेट करने वाले कुछ खास तरह के हमलों से सुरक्षा मिलती है.
SameSite
अगर किसी ऐसी साइट से संसाधन का अनुरोध किया जाता है जिसे आपने नहीं खोला है, तो उसे क्रॉस-साइट अनुरोध कहा जाता है. क्रॉस-साइट अनुरोध के जवाब में सेट की गई कुकी, तीसरे पक्ष की कुकी होती है.
SameSite एट्रिब्यूट से यह कंट्रोल किया जाता है कि किसी अनुरोध में तीसरे पक्ष की कुकी शामिल की जाएगी या नहीं. इसकी तीन वैल्यू हो सकती हैं: Strict, Lax या None.
ज़्यादा जानें: तीसरे पक्ष की कुकी क्या होती हैं?
Strict
यह कुकी सिर्फ़ उन अनुरोधों के जवाब में भेजी जाएगी जो कुकी के ऑरिजिन वाली साइट के किसी पेज से किए गए हैं. उदाहरण के लिए: मान लें कि कोई उपयोगकर्ता cats.example पर जाता है और उसके पास SameSite=Strict एट्रिब्यूट के साथ सेट की गई कुकी है. बाद में, उपयोगकर्ता किसी दूसरी साइट पर होता है और वह cats.example पर मौजूद किसी पेज के लिंक पर क्लिक करता है. सेट की गई कुकी को उस अनुरोध में शामिल नहीं किया जाएगा.
Lax
यह Strict की तरह ही काम करता है. हालांकि, जब उपयोगकर्ता कुकी की ओरिजन साइट के लिंक पर क्लिक करता है, तब ब्राउज़र भी कुकी को शामिल करेगा. (Strict के पिछले उदाहरण में, जब उपयोगकर्ता cats.example के लिंक पर क्लिक करेगा, तब कुकी शामिल की जाएगी.) अगर Set-Cookie हेडर में कोई SameSite एट्रिब्यूट शामिल नहीं किया गया है, तो Lax डिफ़ॉल्ट रूप से सेट होता है.
कोई नहीं
कोई पाबंदी नहीं: कुकी को अनुरोध में शामिल किया जाएगा. भले ही, वह किसी दूसरी साइट से किया गया हो या नहीं. SameSite=None के साथ, कुकी में Secure एट्रिब्यूट भी होना चाहिए.
डेटा सोर्स बांटा गया
इस एट्रिब्यूट की मदद से, किसी कुकी को पार्टिशन किए गए स्टोरेज में शामिल किया जा सकता है. इसमें हर टॉप-लेवल साइट के लिए अलग "कुकी जार" होता है. इस कुकी को दो बार कुंजी दी जाती है. पहली बार टॉप-लेवल साइट और दूसरी बार उस डोमेन से जो इसे सेट करता है.
उदाहरण के लिए: मान लें कि वेबसाइट A और वेबसाइट B, दोनों में वेबसाइट C से एक iframe शामिल है. वेबसाइट A पर iframe से सेट की गई किसी पार्टीशन की गई कुकी को वेबसाइट B पर iframe से ऐक्सेस नहीं किया जा सकता: AC कुकी, BC कुकी से अलग होती है.
Partitioned एट्रिब्यूट वाली कुकी को सीएचआईपीएस कहा जाता है. इसका मतलब है, कुकीज़ हैविंग इंडिपेंडेंट पार्टिशन्ड स्टेट.
पार्टिशन्ड कुकी में Secure एट्रिब्यूट होना चाहिए.
इसके बारे में ज़्यादा जानें: कुकीज़ हैविंग इंडिपेंडेंट पार्टिशन्ड स्टेट.
Expires और Max-Age
आपके पास Expires तारीख और समय या Max-Age सेकंड में यह तय करने का विकल्प होता है कि कुकी को कब मिटाया जाना चाहिए और कब तक नहीं भेजा जाना चाहिए. उदाहरण के लिए:
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;Set-Cookie:cat=tabby; Max-Age=86400
Max-Age या Expires एट्रिब्यूट की वैल्यू नहीं देने पर, मौजूदा सेशन खत्म होने पर कुकी मिटा दी जाएगी. इस तरह की कुकी को कभी-कभी सेशन कुकी भी कहा जाता है.
डोमेन
अगर किसी Set-Cookie हेडर में Domain एट्रिब्यूट मौजूद है, तो कुकी को उस डोमेन और उसके किसी भी सबडोमेन के अनुरोधों के साथ शामिल किया जाएगा.
अगर Set-Cookie हेडर में Domain एट्रिब्यूट नहीं है, तो कुकी को सबडोमेन के अनुरोधों में शामिल नहीं किया जाएगा.
दूसरे शब्दों में कहें, तो Domain एट्रिब्यूट शामिल करने से, डोमेन पर लगी पाबंदियां कम हो जाती हैं.
उदाहरण के लिए, वेबसाइट cats.example से मिले जवाब के साथ:
Set-Cookie:cat=tabby
यह कुकी सिर्फ़cats.exampleके अनुरोधों के साथ शामिल की जाएगीSet-Cookie:cat=tabby; Domain=cats.example
यह कुकी,cats.exampleके अनुरोधों के साथ-साथfluffy.cats.exampleयाuser.assets.cats.exampleजैसे सबडोमेन पर संसाधनों के लिए किए गए अनुरोधों में भी शामिल होगी
पथ
अगर Set-Cookie रिस्पॉन्स हेडर में Path एट्रिब्यूट शामिल किया जाता है, तो सेट की गई कुकी को सिर्फ़ उन यूआरएल के अनुरोधों में शामिल किया जाएगा जो Path वैल्यू से मेल खाते हैं. ये यूआरएल, कुकी सेट करने वाली साइट पर मौजूद होने चाहिए.
उदाहरण के लिए:
Set-Cookie:cat=tabby; Path=/articles
यह कुकी,/articlesसे शुरू होने वाले किसी भी यूआरएल पाथ के अनुरोध में शामिल की जाएगी:
✅https://cats.example/articles/tabby/index.html
✅https://cats.example/articles/breeds/tabby/index.html
❎https://cats.example/images/tabby.jpg
❎https://cats.example/en/articles/tabby/index.htmlSet-Cookie:cat=tabby; Path=/
साइट के किसी भी यूआरएल के लिए किए गए सभी अनुरोधों में कुकी शामिल होगी.
अगर Set-Cookie रिस्पॉन्स हेडर में Path वैल्यू नहीं है, तो कुकी को सिर्फ़ उसी डायरेक्ट्री के अनुरोधों के साथ शामिल किया जाएगा. उदाहरण के लिए, मान लें कि cats.example/images/tabby.jpg. के अनुरोध के जवाब में cat=tabby कुकी सेट की गई है. अगर कोई Path सेट नहीं किया गया है, तो कुकी को सिर्फ़ cats.example/images डायरेक्ट्री में मौजूद फ़ाइलों के अनुरोधों के साथ शामिल किया जाएगा.
डेमो
- 1pc.glitch.me: पहले पक्ष की कुकी का डेमो
- 3pc.glitch.me: तीसरे पक्ष की कुकी का डेमो
टूल
- Chrome DevTools में कुकी देखना, जोड़ना, उनमें बदलाव करना, और उन्हें मिटाना
- Privacy Sandbox विश्लेषण टूल
ज़्यादा जानें
- पहले-पक्ष की कुकी की रेसिपी
- कुकी क्या होती हैं?
- तीसरे पक्ष की कुकी क्या होती हैं?
- एचटीटीपी अनुरोध और जवाब
- कुकी टूल
- कुकी के डेमो
- एचटीटीपी कुकी का इस्तेमाल करना
- SameSite कुकी के बारे में जानकारी
- OWASP: कुकी