2013-04-10 7 views
21

मेरे पास क्लाइंट साइड जावास्क्रिप्ट सेटिंग कुकीज़ के साथ यह वास्तविक अजीब समस्या है। मैं कुछ 'वरीयताओं' को स्टोर करने के लिए कुकीज़ का उपयोग करने के लिए फिलहाल एक छोटा सा पृष्ठ डेमो विकसित कर रहा हूं। कृपया ध्यान दें कि मैं इस डेमो या किसी तीसरे पक्ष के jQuery प्लगइन के लिए सर्वर साइड भाषा का उपयोग नहीं कर सकता।जावास्क्रिप्ट दस्तावेज़.cookie हमेशा खाली स्ट्रिंग

तो मैं एक जावास्क्रिप्ट वस्तु लिखा है एक कुकी सेट करने के लिए:

var cookie = { 
    set: function (name,value,exdays) { 

    var exdate = new Date(); 
    exdate.setDate(exdate.getDate() + exdays); 
    var value = escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()); 
    document.cookie=name + "=" + value; 
    console.log(document.cookie); 
    } 
} 

cookie.set('foo','bar',2); 
console.log(document.cookie); 

यह सिर्फ एक खाली स्ट्रिंग देता है। मैं अगर मैं इसे सीधे document.cookie

> document.cookie = "foo=bar"; 
"foo=bar" 
> document.cookie 
"" 

को संशोधित करने के माध्यम से कर सकते हैं कैसे आप क्लाइंट साइड जावास्क्रिप्ट के माध्यम से एक कुकी सेट करते देखने के लिए क्रोम कंसोल में चले गए हैं?

संपादित करें: मैं गुप्त मोड में नहीं हूं और कुकीज़ सक्षम हैं।

+0

यह भी देखें https://developer.mozilla.org/en-US/docs/DOM/document.cookie –

+0

समान (लेकिन समान नहीं) समस्या होने पर। हम कुकीज़ को पढ़ और लिख सकते हैं, बस उन सभी को नहीं। विशेष रूप से सत्र कुकी (JSESSIONID) को पढ़ा नहीं जा सकता ... ऐसा लगता है कि यह एक सुरक्षा सुविधा है लेकिन इस पर जानकारी खोजने में कठिनाई हो रही है ... किसी को इसके बारे में पता है? –

+2

@StijndeWitt: यह एक अलग सवाल है, कृपया इसे इस पर बक्षीस जोड़ने के बजाय अपने आप से पूछें। बीटीडब्ल्यू, शायद जवाब ['http-only' कुकीज़] हैं (http://en.wikipedia.org/wiki/HTTP_cookie#HttpOnly_cookie) – Bergi

उत्तर

35

यदि आप वेब सर्वर में नहीं चल रहे हैं तो आप चीज़ों के रूप में कुकीज़ सेट नहीं कर सकते हैं।

file:///C:/Users/me/Desktop/demo/demo.html

तथापि

:

http://localhost/demo/demo.html काम करता है।

+0

इससे मुझे कुछ बार पता चला कि इससे पहले मुझे पता चला था। –

+11

वास्तव में कुकीज़ 'लोकलहोस्ट' के साथ ठीक से काम नहीं करेगी, आपको एक "वैध" डोमेन की आवश्यकता होगी, भले ही यह आईपी है, उदाहरण के लिए 127.0.0.1 या 0.0.0.0। http: // stackoverflow जांचें।कॉम/प्रश्न/11342 9 0/कुकी-ऑन-लोकलहोस्ट-साथ-स्पष्ट-डोमेन/1188145 # 1188145 –

+0

आपने हमें बहुत –

35

एचटीपी केवल कुकीज़ को जावास्क्रिप्ट से एक्सेस नहीं किया जा सकता है और सत्र कुकीज़ आमतौर पर केवल कुकीज़ के रूप में सेट की जाती हैं। यह StackOverflow प्रश्न भी देखें: How to read a secure cookie using JavaScript

तो ... जांचें कि आप जिस कुकी को पढ़ना चाहते हैं, वह 'केवल' ध्वज सेट है ... यदि ऐसा है, तो आप अपराधी को जानते हैं। यह एक बग नहीं है, यह एक सुविधा है!

+1

यह मुझे परेशान कर रहा है कि "उत्तर" को इतने सारे अपवॉट क्यों मिला क्योंकि जावास्क्रिप्ट में लिखी गई कुकी पर केवल सेट करना असंभव है। –

+0

शीर्षक: 'जावास्क्रिप्ट दस्तावेज़.cookie हमेशा खाली स्ट्रिंग'। उत्तर: ऐसा हो सकता है जब केवल 'HttpOnly' ध्वज सेट के साथ कुकीज़ हों। नहीं, आप जेएस से इन कुकीज़ को * लिख नहीं सकते हैं, लेकिन आप * जेएस से कुकीज़ को पढ़ने का प्रयास कर सकते हैं और यह वापस आ जाएगा ... खाली स्ट्रिंग ... भले ही आप HTTP हेडर में और ब्राउजर में कुकी देखते हैं इंस्पेक्टर, जेएस आपको इसे पढ़ने की अनुमति नहीं देगा। –

+0

मुझे लगता है कि यह अपवॉट हो गया है क्योंकि: '1) 'लोग वास्तव में अक्सर पढ़ने की कोशिश करते हैं उदा। जेएस से सत्र कुकी। '2) 'परिणामस्वरूप वे खाली स्ट्रिंग प्राप्त करते हैं। '3) 'वे गूगल और यहां आते हैं। '4) 'वे इस जवाब को देखते हैं और इसे कम करते हैं, यह वही है जो हो रहा है। '5) 'धन्यवाद आदमी +1। :) –

0

यह मेरे लिए काम किया जब स्थानीय होस्ट से भाग गया, चल क्रोम 28.0.1472.0 कनारी: एक सर्वर में

<!DOCTYPE html> 
<html> 
<head> 
    <title>localhost cookie</title> 
</head> 
<body> 
    <script type="text/javascript"> 
    console.log(document.cookie); 
    var myCookie = "mycookie=hellocookie"; 
    document.cookie = myCookie; 
    </script> 
</body> 
</html> 

भागो यह,, पृष्ठ पर जाकर अपने कुकी संग्रह को देखने के पृष्ठ ताज़ा करें और देखो अपने कंसोल।

फ़ाइल के रूप में खोले जाने पर यह कुकी सेट नहीं किया गया था लेकिन सर्वर से खोले जाने पर हर बार काम करता था।

संबंधित मुद्दे