2010-11-22 19 views
8

मेरे पास domain.com में एक पृष्ठ है जो JSONP AJAX अनुरोध (jQuery के .getJSON() फ़ंक्शन का उपयोग करके) को anotherdomain.com में किसी URL पर बनाता है। मैंने सोचा (पढ़ा: माना जाता है) कि anotherdomain.com में संसाधन उस डोमेन में सेट की गई किसी भी कुकीज पर सर्वर-साइड पहुंच होगा, लेकिन ऐसा लगता है कि ऐसा नहीं लगता है?JSONP पर कुकी एक्सेस

AJAX कॉल विशेष रूप से किसी विशेष कुकी तक पहुंचने के लिए किया जा रहा है, कुछ डेटा मैनिपुलेशन करें और कुकी मूल्य द्वारा की गई जानकारी के एक समृद्ध सेट को वापस कर दें। मूल डोमेन में कुकी मूल्य तक सीधे पहुंच नहीं है, इसलिए मैंने सोचा कि एक AJAX अनुरोध मुझे आवश्यक राज्य को बनाए रखेगा।

कुकीज़ के बारे में जानकारी का कौन सा महत्वपूर्ण टुकड़ा मैं देख रहा हूं? मैं थक गया हूँ और मैं इसे देख नहीं रहा हूं।

धन्यवाद।

अद्यतन

मैं इसे करने का एक रास्ता मिल गया, लेकिन यह मेरी आंखों के लिए JSONP की तरह लग रहा है, तो मैं सोच रहा हूँ क्यों इस तरह से काम करता है, जबकि अजाक्स संस्करण नहीं करता है। अनुरोध सिर्फ ब्राउज़र सत्र से डिस्कनेक्ट किया गया है ताकि कोई कुकी एक्सेस न हो?

<script type="application/x-javascript" src="<?php echo $service_url . '&callback=interests' ?>"></script> 
<script type="text/javascript"> 
    function interests(data) { 
    $(function() { 
     var c_behaviors = data.length; 
     var ids   = []; 

     for(var i = 0; i < c_behaviors; i++) { 
     ids.push(data[i].behavior_id); 
     } 

     $('body').append('<p><label>Returned:</label> ' + ids.join(', ') + '</p>');  
    }); 
    } 
</script> 
+1

मुझे यकीन है कि आपने इसे तीन बार चेक किया हो सकता है, लेकिन आप कितने निश्चित हैं कि कुकी को anotherdomain.com द्वारा सेट किया गया था? इसके अलावा, कुकी सेट की स्थिति क्या है, जैसे कि समाप्ति, पथ इत्यादि –

+0

हाँ। अगर मैं AJAX कॉल से पहले लक्षित यूआरएल को अलर्ट करता हूं और फिर एक नए टैब में लक्ष्य यूआरएल लोड करता हूं, तो मुझे वही मिलता है जो मुझे उम्मीद है। ऐसा लगता है कि अजाक्स कॉल ब्राउज़र सत्र से अधिक डिस्कनेक्ट हो गया है जैसा मैंने सोचा था। –

+0

"json" टाइप के साथ $ .ajax कॉल आज़माएं और देखें कि आपको किस प्रकार के परिणाम मिलते हैं। बीटीडब्लू, आपका JSONP दृष्टिकोण दस्तावेज किया गया था http://stackoverflow.com/questions/1421245/make-getjson-in-jquery-to-pass-cookies-to-external-domain और किसी और के लिए भी काम किया –

उत्तर

9

सभी ajax अनुरोध करने के लिए The same origin policy applies, इसलिए यदि डोमेन एक ajax कॉल में एक्सेस किए जा रहे डोमेन ब्राउज़र (document.host) में लोड तुलना में अलग है, अनुरोध किया गया URL में डोमेन से जुड़े सभी कुकीज़ नहीं होगा भेजा जाना इसलिए, JSONP दृष्टिकोण काम करता है क्योंकि यह विंडो में एक नया स्क्रिप्ट टैग लिखता है, जो किसी भी संसाधन अनुरोध की तरह व्यवहार करेगा जो ब्राउज़र बाहरी डोमेन पर कर सकता है (इसलिए यूआरएल में डोमेन से जुड़े सभी कुकीज़ को पास कर रहा है)। मैंने अपने क्रोम कंसोल से $.post("http://atdmt.com") को कॉल करके यह भी पुष्टि की है, जबकि ब्राउज़र में stackoverflow.com पर (एकमात्र अन्य डोमेन जिसमें मेरे ब्राउज़र में कुकीज़ थी, जवाब लिखते समय) और यह किसी भी कुकीज को नहीं भेजता था अनुरोध शीर्षलेख।

एक अन्य समाधान के लिए स्थिति को बनाए रखने की समस्या से बचने के लिए anotherdomain.com के लिए किया जाएगा anotherdomain.com एक प्रथम पक्ष कुकी (कुकी के डोमेन विशेषता सेटिंग नहीं द्वारा) की स्थापना की और जब एक ajax/जेसन अनुरोध को बनाया गया है anotherdomain.com उन कुकीज़ को जावास्क्रिप्ट के माध्यम से एक्सेस करें और उन्हें मानक HTTP पैरा का उपयोग करके अनुरोध को दबाएं।

आशा है कि मैंने मदद की है।

1

मुझे पहले भी यही समस्या आई है। मुझे मिली समस्या यह है कि अधिकतर ब्राउज़र आपको एक सत्र को स्थापित नहीं करने देंगे (यानी एक सत्र कुकी सेट करें) जब एक ही मूल नीति को पूरा नहीं किया जा रहा है।

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