उप डोमेन और डोमेन के बीच कुकी साझा करें


420

मेरे दो सवाल हैं। मैं समझता हूं कि अगर मैं .mydomain.comकुकी में डोमेन (अग्रणी बिंदु के रूप में) निर्दिष्ट करता हूं तो सभी उप-डोमेन कुकी साझा कर सकते हैं।

( उपडोमेन के बिना ) subdomain.mydomain.comमें बनाई गई कुकी का उपयोग कर सकते हैं ?mydomain.comwww

क्या mydomain.com( wwwउपडोमेन के बिना ) कुकी बनाया जा सकता है, यदि उसमें बनाया गया है subdomain.mydomain.com?


3
हाँ आप कर सकते हैं .. कृपया नीचे दिए गए लिंक को देखें codeguru.com/csharp/csharp/cs_internet/article.php/c19417/…
राहुल जैन


क्या आप इस प्रश्न को देख सकते हैं stackoverflow.com/questions/38351769/…
जयवर्धन गंगे

1
@ adam0101 क्या होगा यदि डोमेन और उप डोमेन अलग-अलग सर्वर पर होस्ट किए जाते हैं?
user3782114

3
@ user3782114, इससे कोई फर्क नहीं पड़ता कि वे विभिन्न सर्वरों पर हैं। मेरे मामले में, वे न केवल विभिन्न सर्वरों पर थे, बल्कि प्रत्येक डोमेन कई सर्वरों पर लोड-संतुलित था। एक चीज जिसने हमें थोड़ा ऊपर किया, वह यह था कि निचले वातावरण (देव, परीक्षण, ऊट, आदि) ने एक ही कुकी को एक बार साझा करना शुरू कर दिया था क्योंकि हमने ऐसा किया था क्योंकि हमने उन्हें "dev.oursite.com", "परीक्षण" नाम दिया था। oursite.com ", आदि .. वहाँ की चाल (कम से कम। नेट) में प्रत्येक वातावरण के लिए एक अलग मशीन की कुंजी है और इसे अपने Web.config में सहेजना (यह मानते हुए कि आप प्रत्येक वातावरण के लिए कॉन्फ़िगरेशन बदलना)।
adam0101

जवाबों:


653

2 डोमेन mydomain.comऔर subdomain.mydomain.comकेवल कुकीज़ साझा कर सकते हैं यदि डोमेन को Set-Cookieहेडर में स्पष्ट रूप से नाम दिया गया है । अन्यथा, कुकी का दायरा अनुरोध मेजबान तक सीमित है। (इसे "होस्ट-ओनली कुकी" के रूप में जाना जाता है। देखें कि एक होस्ट केवल कुकी क्या है? )

उदाहरण के लिए, यदि आपने निम्नलिखित शीर्ष लेख भेजा है subdomain.mydomain.com, तो कुकी को अनुरोधों के लिए नहीं भेजा जाएगा mydomain.com:

Set-Cookie: name=value

हालाँकि यदि आप निम्नलिखित का उपयोग करते हैं, तो यह दोनों डोमेन पर प्रयोग करने योग्य होगा:

Set-Cookie: name=value; domain=mydomain.com

यह कुकी mydomain.com के किसी भी उपडोमेन के लिए भेजी जाएगी , जिसमें नेस्टेड उपडोमेन भी शामिल हैं subsub.subdomain.mydomain.com

में RFC 2109 , एक प्रमुख डॉट के बिना एक डोमेन का मतलब है कि यह उप डोमेन पर इस्तेमाल नहीं किया जा सकता है, और केवल एक प्रमुख बिंदु ( .mydomain.com), यह सभी उप डोमेंस पर इस्तेमाल किया जा रहा है (न कि शीर्ष स्तर के डोमेन की अनुमति होगी तो आप क्या पूछना था पुरानी युक्ति में संभव नहीं है)।

हालांकि, सभी आधुनिक ब्राउज़र नए विनिर्देशन RFC 6265 का सम्मान करते हैं , और किसी भी अग्रणी बिंदु को अनदेखा करेंगे, जिसका अर्थ है कि आप उप-डोमेन के साथ-साथ शीर्ष-स्तरीय डोमेन पर भी कुकी का उपयोग कर सकते हैं।

सारांश में, यदि आप ऊपर से दूसरे उदाहरण की तरह एक कुकी सेट करते हैं, तो mydomain.comयह subdomain.mydomain.comइसके द्वारा सुलभ होगा , और इसके विपरीत। इसका उपयोग कुकीज़ को अनुमति देने sub1.mydomain.comऔर sub2.mydomain.comसाझा करने के लिए भी किया जा सकता है ।

यह सभी देखें:


3
धन्यवाद; मैंने डॉट के महत्व के बारे में एक नोट जोड़ा।
cumbuckley

2
मुझे समझ में नहीं आता कि आप सिर्फ अग्रणी क्यों नहीं डालेंगे "।" पुराने और नए के साथ अधिकतम संगतता के लिए डोमेन पर
एलन मैकडोनाल्ड 8

12
पुराने मानक में, एक कुकी domain=.mydomain.comनंगे mydomain.com के लिए मान्य नहीं है, इसलिए दो RFC एक दूसरे के साथ संगत नहीं हैं।
cuckuckley

4
@ फ्रेंक, हाँ मुझे पता है। मेरी टिप्पणी यह ​​स्पष्ट करने के लिए थी कि मेरा सवाल एक डोमेन और एक उपडोमेन के बीच कुकीज़ को साझा करने के बारे में था, दो उप-डोमेन के बीच नहीं।
adam0101

3
मुझे यकीन नहीं है कि यह कहां रखा जाए इसलिए मैं स्वीकृत उत्तर की टिप्पणियों को चुन रहा हूं। मेरी लोकलहोस्ट पर उपरोक्त साबित करने में लंबे समय तक असफल प्रयोग हुए, जब तक यह मेरे साथ नहीं हुआ कि मुझे नाम में एक डॉट के साथ स्थानीयहोस्ट कॉल करना चाहिए। जैसे "localhost.com" या ऐसा ही कुछ। फिर सभी "सेट कुकीज़" व्यवहार इस उत्तर में यहां लिखे गए स्पष्टीकरण के बाद शुरू हुए। यह आशा करना किसी की मदद कर सकता है।
सेस्क

32

मुझे यकीन नहीं है कि @cmbuckley का जवाब पूरी तस्वीर दिखा रहा है। मैंने जो पढ़ा है वह है:

जब तक कि कुकी की विशेषताएँ इंगित नहीं करती हैं, तब तक कुकी केवल मूल सर्वर (और उदाहरण के लिए, किसी भी उप-डोमेन पर) को वापस कर दी जाती है, और यह वर्तमान सत्र के अंत में समाप्त हो जाती है (जैसा कि उपयोगकर्ता एजेंट द्वारा परिभाषित किया गया है)। उपयोगकर्ता एजेंट अपरिचित कुकी को अनदेखा करते हैं।

आरएफसी 6265

भी

8.6.  Weak Integrity

   Cookies do not provide integrity guarantees for sibling domains (and
   their subdomains).  For example, consider foo.example.com and
   bar.example.com.  The foo.example.com server can set a cookie with a
   Domain attribute of "example.com" (possibly overwriting an existing
   "example.com" cookie set by bar.example.com), and the user agent will
   include that cookie in HTTP requests to bar.example.com.  In the
   worst case, bar.example.com will be unable to distinguish this cookie
   from a cookie it set itself.  The foo.example.com server might be
   able to leverage this ability to mount an attack against
   bar.example.com.

मेरे लिए इसका मतलब है कि आप कुकीज़ को उपडोमेन / डोमेन द्वारा पढ़े जाने से बचा सकते हैं लेकिन अन्य डोमेन पर कुकीज़ लिखने से नहीं रोक सकते। तो कोई आपके ब्राउज़र द्वारा देखी गई किसी अन्य उपडोमेन को नियंत्रित करके आपकी साइट कुकीज़ को फिर से लिख सकता है। जो एक बड़ी चिंता का विषय नहीं हो सकता है।

@Cmbuckley / द्वारा प्रदान की गई विस्मयकारी कुकीज़ परीक्षण साइट जो मेरे जैसे उसके उत्तर में छूट गई; ऊपर और नीचे स्क्रॉल करने लायक /:


4
जो मैं कह रहा हूं उससे सहमत होना दिखता है: जब तक आप निर्दिष्ट नहीं करते हैं domain, तब तक कुकी केवल अनुरोध मेजबान के लिए उपयोग की जाती है। इसका मतलब है कि Set-Cookie: name=valueसे mydomain.comउप डोमेन के लिए अनुरोध के साथ नहीं भेजा जाएगा। इस टेस्ट स्क्रिप्ट के साथ एक नाटक भी करें।
cuckuckley

@ कुंबले, ठीक है, आपने जो कहा वह सही लगता है। मैं अपना उत्तर पुनः लिखूंगा। उसे इंगित करने के लिए धन्यवाद।
अकोस्टैडिनोव

इंगित करने की आवश्यकता है, कि धारा 4.1.2 (पहला उद्धरण) आदर्श नहीं है ...
वेल्डा

Cumbuckley लिंक के लिए धन्यवाद। यह परीक्षण करने के लिए अच्छा है कि यह जल्दी कैसे काम करता है।
लॉफटॉग

22

यहां DOM कुकी एपीआई ( https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie ) का उपयोग करके एक उदाहरण दिया गया है , इसलिए हम स्वयं के व्यवहार को देख सकते हैं।

यदि हम निम्नलिखित जावास्क्रिप्ट निष्पादित करते हैं:

document.cookie = "कुंजी = मूल्य"

यह निष्पादन के समान ही प्रतीत होता है:

document.cookie = "कुंजी = मूल्य; डोमेन = mydomain.com"

डोमेन mydomain.com पर कुकी कुंजी उपलब्ध है (केवल) ।


अब, यदि आप mydomain.com पर निम्न जावास्क्रिप्ट निष्पादित करते हैं:

document.cookie = "कुंजी = मूल्य; डोमेन = .mydomain.com"

कुकी कुंजी उपलब्ध हो जाती है mydomain.com के साथ-साथ subdomain.mydomain.com के


अंत में, यदि आप subdomain.mydomain.com पर निम्नलिखित को आज़माएँ और निष्पादित करें:

document.cookie = "कुंजी = मूल्य; डोमेन = .mydomain.com"

क्या कुकी कुंजी subdomain.mydomain.com के लिए उपलब्ध है ? मैं थोड़ा हैरान था कि यह अनुमति है; मैंने यह मान लिया था कि यह एक उपडोमेन के लिए एक सुरक्षा उल्लंघन होगा जो एक मूल डोमेन पर कुकी सेट करने में सक्षम होगा।


1
यह मुझे आश्चर्यचकित करता है यदि httponlyकुकीज़ के व्यवहार के बारे में अलग-अलग ऐनक हैं जो आपके द्वारा बनाई जा रही कुकीज़ की तरह हैं।
adam0101

3
आपके द्वारा पोस्ट किए गए डॉक्स आपके द्वारा दिए गए कथनों से सहमत नहीं हैं। पहले 2 उदाहरण समतुल्य नहीं हैं (एक domainविशेषता कुकी को उप-डोमेन पर काम करने का कारण बनाती है; ऐसी कोई विशेषता नहीं है)। अग्रणी बिंदुओं को सर्वोत्तम रूप से अनदेखा किया जाता है और सक्रिय रूप से सबसे खराब रूप से अवरुद्ध किया जाता है।
cumbuckley

यदि आप होस्ट हेडर पर भरोसा नहीं करना चाहते हैं तो यह सबसे अच्छा उपाय है। मैंने इसे और इसके कामकाज की जाँच की
सिज़्मोन

14

कृपया ध्यान दें कि आप एक डोमेन पर एक उपडोमेन से कुकी सेट कर सकते हैं।

(अनुरोध के जवाब में भेजा गया subdomain.mydomain.com)

Set-Cookie: name=value; Domain=mydomain.com // GOOD

लेकिन आप नहीं कर सकते उप डोमेन पर एक डोमेन से एक कुकी सेट ।

(अनुरोध के जवाब में भेजा गया mydomain.com)

Set-Cookie: name=value; Domain=subdomain.mydomain.com // Browser rejects cookie

क्यों ?

विनिर्देशों के अनुसार RFC 6265 खंड 5.3.6 संग्रहण मॉडल

यदि विहित अनुरोध-होस्ट डोमेन-विशेषता से मेल नहीं खाता है: कुकी को पूरी तरह से अनदेखा करें और इन चरणों को निरस्त करें।

और RFC 6265 खंड 5.1.3 डोमेन मिलान

डोमेन मिलान

एक स्ट्रिंग डोमेन किसी दिए गए डोमेन स्ट्रिंग से मेल खाता है यदि निम्न में से कम से कम एक स्थिति पकड़ में है:

  1. डोमेन स्ट्रिंग और स्ट्रिंग समान हैं। (ध्यान दें कि इस बिंदु पर कम स्थिति में डोमेन स्ट्रिंग और स्ट्रिंग दोनों को विहित किया जाएगा।)

  2. निम्नलिखित में से सभी स्थितियां:

    • डोमेन स्ट्रिंग स्ट्रिंग का एक प्रत्यय है।

    • स्ट्रिंग का अंतिम वर्ण जो डोमेन स्ट्रिंग में शामिल नहीं है, वह% x2E ("।") वर्ण है।

    • स्ट्रिंग एक होस्ट नाम है (यानी, आईपी पता नहीं)।

तो "subdomain.mydomain.com" डोमेन-मैच "mydomain.com", लेकिन "mydomain.com" डोमेन-मिलान "subdomain.mydomain.com" नहीं करता है

चेक इस जवाब भी।


यह मेरे लिए सबसे मददगार जवाब था।
टोबी

3

दोनों ही मामलों में यह कर सकता है, और यह IE और एज दोनों के लिए डिफ़ॉल्ट व्यवहार है।

अन्य उत्तर मूल्यवान अंतर्दृष्टि जोड़ते हैं लेकिन मुख्य रूप से क्रोम में व्यवहार का वर्णन करते हैं। यह ध्यान रखना महत्वपूर्ण है कि व्यवहार IE में पूरी तरह से अलग है। CMBuckley की बहुत ही उपयोगी परीक्षण स्क्रिप्ट दर्शाती है कि (कहना) क्रोम में, जब कोई डोमेन निर्दिष्ट नहीं किया जाता है, तो कुकी रूट और सबडोमेन के बीच साझा नहीं की जाती हैं। हालांकि IE में एक ही परीक्षण से पता चलता है कि वे साझा किए गए हैं। यह IE केस CMBuckley के www-or-not-not-www लिंक में ले-होम विवरण के करीब है। मुझे पता है कि यह मामला है क्योंकि हमारे पास एक प्रणाली है जो रूट और उपडोमेन दोनों पर अलग-अलग सर्विकैक कुकीज़ का उपयोग करती है। यह तब तक ठीक काम करता है जब तक कोई इसे IE में एक्सेस नहीं करता है और दो सिस्टम लड़ते हैं जिनके सत्र कुकी तब तक जीतते हैं जब तक कि हम कैश को उड़ा नहीं देते।


0

यदि आप लोकलहोस्ट पर काम कर रहे हैं तो सावधान रहें! यदि आप इस तरह से अपने कुकी को js में संग्रहीत करते हैं:

document.cookie = "key=value;domain=localhost"

यह आपके उप डोमेन की तरह सुलभ नहीं हो सकता है sub.localhost। इस समस्या को हल करने के लिए आपको वर्चुअल होस्ट का उपयोग करने की आवश्यकता है । छूट के लिए आप अपने वर्चुअल होस्ट को कॉन्फ़िगर कर सकते हैं ServerName localhost.comइसके बाद आप अपने कुकी को अपने डोमेन और उप डोमेन पर इस तरह स्टोर कर पाएंगे:

document.cookie = "key=value;domain=localhost.com"

-12

सरल उपाय

setcookie("NAME", "VALUE", time()+3600, '/', EXAMPLE.COM);

Setcookie का 5 वाँ पैरामीटर कुकी के लिए उपलब्ध उप (उप) डोमेन को निर्धारित करता है। इसे (EXAMPLE.COM) पर सेट करना किसी भी उपडोमेन (जैसे: SUBDOMAIN.EXAMPIN.COM) को उपलब्ध कराता है

संदर्भ: http://php.net/manual/en/function.setcookie.php


17
यह प्रश्न PHP विशिष्ट नहीं है, मुझे नहीं लगता कि यह मान्य है।
सेरेलगेटर

1
सर्जेलरेटर, मैंने एक सवाल नहीं किया। मैं ओपी को जवाब दे रहा था।
कानून

4
@ मेरा मानना ​​है कि सर्जकटर का अर्थ है ओपी का सवाल PHP विशिष्ट नहीं है, जबकि आपका उत्तर PHP-केवल समाधान प्रतीत होता है, इसलिए यह OP के प्रश्न के लिए योग्य नहीं होगा।
मिराज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.