एक डोमेन पर एक जावास्क्रिप्ट कुकी बनाना और इसे उप डोमेन पर पढ़ना


101

नीचे एक जावास्क्रिप्ट कुकी है जो उपयोगकर्ता के कंप्यूटर पर 12 महीनों के लिए लिखा गया है।

जब हम कुकी को अपने मुख्य डोमेन पर सेट करते हैं example.com, जैसे कि , क्या उपयोगकर्ता को उप-डोमेन की तरह जाना चाहिए test.example.com, तो हमें अपने "परीक्षण" उपडोमेन में उपयोगकर्ता की गतिविधि की पहचान करना जारी रखना चाहिए।

लेकिन वर्तमान कोड के साथ, जैसे ही वे जाते हैं www.example.comऔर यात्रा test.example.comकरते हैं, उन्हें "हैलोवर्ल्ड" के रूप में चिह्नित नहीं किया जाता है।

क्या कोई मेरे कोड के साथ कुकी को उप-डोमेन में पढ़ने की अनुमति देने में मदद करेगा?

<script type="text/javascript">
  var cookieName = 'HelloWorld';
  var cookieValue = 'HelloWorld';
  var myDate = new Date();
  myDate.setMonth(myDate.getMonth() + 12);
  document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate;
</script>

जवाबों:


209

बस अपने कुकी पर सेट domainऔर pathविशेषताएँ, जैसे:

<script type="text/javascript">
var cookieName = 'HelloWorld';
var cookieValue = 'HelloWorld';
var myDate = new Date();
myDate.setMonth(myDate.getMonth() + 12);
document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate 
                  + ";domain=.example.com;path=/";
</script>

2
मैं स्थानीय होस्ट में यह करने के लिए कोशिश कर रहा हूँ और मैं पथ को बदल नहीं सकते
Enve

7
@Enve - ब्राउजर लोकलहोस्ट कुकीज को अन्य कुकीज की तुलना में थोड़ा अलग मानते हैं। या यों कहें, वे सभी कुकीज़ को एक तरह से व्यवहार करते हैं जो स्थानीयहोस्ट के साथ काम करना मुश्किल बनाता है। उदाहरण के लिए, stackoverflow.com/questions/1134290/… देखें । मैं सुझाव देता हूं कि अपनी hostsफ़ाइल को संपादित करें और जैसे कुछ myserver.localकरना है 127.0.0.1। तब आप अपने स्थानीय सर्वर (और कुकीज़ सेट करते समय) का उपयोग करने के लिए उपयोग कर सकते हैं, और उम्मीद है कि सब कुछ काम करना चाहिए।
अरोठ

3
आपके द्वारा बनाए गए और पुनः प्राप्त सभी कुकी मान स्ट्रिंग मान होने चाहिए। स्ट्रिंग्स में ऐसे वर्ण हो सकते हैं जो स्थानीय संग्रहण को परेशान कर सकते हैं जब उन्हें पुनः प्राप्त करने की कोशिश की जा सकती है। एक बात जो मैं सुझाता हूं कि किसी भी रूपांतरण को संभालने के लिए कुकी नाम और मूल्य के लिए वैश्विक encodeURI()और decodeURI()विधियों का उपयोग करना होगा। यानी document.cookie = encodeURI(cookieName) +"=" + encodeURI(cookieValue)
डिजिस्मास ज़विर्ब्लिस

2
यदि आपका सर्वर-साइड कोड C # में लिखा गया है, तो रिक स्ट्राल बेस डोमेन प्राप्त करने के लिए एक विधि प्रदान करता है, जैसे example.com, weblog.west-wind.com/posts/2012/Apr/24/…
CAK2

दुर्भाग्य से जावास्क्रिप्ट का उपयोग sub.example.comकरने के लिए कुकी सेट नहीं किया जा सकता है.example.com
एक

27

तुम्हें चाहिए:

document.cookie = cookieName +"=" + cookieValue + ";domain=.example.com;path=/;expires=" + myDate;

RFC 2109 के अनुसार , सभी उप-डोमेन के लिए एक कुकी उपलब्ध होने के लिए, आपको .अपने डोमेन के सामने रखना होगा ।

पथ सेट करना = / कुकी पूरे निर्दिष्ट डोमेन (उर्फ .example.com) के भीतर उपलब्ध होगी ।


एफडब्ल्यूआईडब्ल्यू - मुझे लगता है कि आपको "रास्ता = समाप्त हो रहा है =" टुकड़ा निकालना होगा और इसे "समाप्त हो रहा है =" पर सेट करना होगा।
malonso

3
नए RFC 6265 के अनुसार अब .डोमेन के सामने इसे शामिल करना आवश्यक नहीं है ।
दान

6

यहाँ एक काम कर उदाहरण है:

document.cookie = "testCookie=cookieval; domain=." + 
location.hostname.split('.').reverse()[1] + "." + 
location.hostname.split('.').reverse()[0] + "; path=/"

यह एक सामान्य समाधान है जो रूट ऑब्जेक्ट को ऑब्जेक्ट से डोमेन लेता है और कुकी सेट करता है। उलटा इसलिए है क्योंकि आपको नहीं पता कि आपके पास कितने उप-डोमेन हैं यदि कोई हो।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.