2008-12-31 12 views
22

के साथ विभिन्न डोमेन पर कुकीज़ सेट करना, इस स्थिति को ऑनलाइन विशेष रूप से कुछ भी नहीं मिला है, इसलिए मैं यहां जाता हूं ... मुझे "first.com" पर संग्रहीत कुकीज़ को सेट/प्राप्त करने की आवश्यकता है "second.com" ब्राउज़ करते समय, मेरे पास "first.com" की पूर्ण पहुंच है, लेकिन मेरे पास केवल "second.com" पर जावास्क्रिप्ट एक्सेस (डीओएम को वांछित कर सकते हैं) है।जावास्क्रिप्ट या अन्य

मेरा पहला दृष्टिकोण दूसरे.com (जेएस के साथ) पर एक आईफ्रेम बनाने के लिए था जो "first.com/doAjax?setCookie=xxx" जैसे पृष्ठ को लोड करता था और उसने कहा कि "first.com/setCookie" ? cookieData = xxx "जो कुकी को" first.com "पर सेट करता है, जिसके साथ हमने पास किया था।

कि कुकी को प्राप्त करने के लिए कुकी ने पहली बार दूसरी साइट पर कुकी को सेट करने के लिए बहुत अच्छा काम किया - मैं मूल रूप से उसी प्रक्रिया का पालन करता हूं, जिसने "first.com/doAjax?getCookie" लोड किया हुआ आईफ्रेम बनाया है और वह होगा "first.com/getCookie" कहने के लिए अजाक्स कॉल करें जो कुकी.com की जानकारी को first.com पर पढ़ेगा और इसे JSON ऑब्जेक्ट के रूप में वापस कर देगा।

समस्या यह है कि मैं उस JSON कुकी ऑब्जेक्ट को "second.com" पर वापस लाने में असमर्थ हूं, इसलिए मैं इसे पढ़ सकता हूं, शायद मैं इसे तब ला सकता हूं जब अजाक्स कॉल "window.top" लेकिन समय के मुद्दे हैं क्योंकि यह आईफ्रेम लोड होने पर सापेक्ष नहीं है। मुझे उम्मीद है कि मैं स्पष्ट हूं और सोच रहा था कि इस पागल आईफ्रेम-> AJAX बकवास के बजाय एक आसान समाधान है, ऐसा लगता है कि यह भी सफारी में कुकीज़ प्राप्त करने के लिए काम नहीं करेगा।

+0

सिर्फ एक नोट यह है कि यह वास्तव में असुरक्षित है क्योंकि कोई भी सेट कर सकता है और पहले.com –

+0

@Luca के लिए कुकीज़ प्राप्त कर सकता है और यदि उपयोगकर्ता के पास तृतीय-पक्ष कुकीज़ अक्षम होती हैं, तो आप कुकी को iframe में भी सेट नहीं कर पाएंगे पहली जगह में। – Pacerier

उत्तर

9

आप दस्तावेज़ के हेड में एक स्क्रिप्ट तत्व इंजेक्ट कर सकते हैं जिसमें एक कॉलबैक है जो आपको जिस काम को चाहिए उसे कुकी पास करता है।

कुछ की तरह:

<script type="text/javascript"> 
    var newfile=document.createElement('script'); 
    newfile.setAttribute("type","text/javascript"); 
    newfile.setAttribute("src", 'http://first.com/doAjax?getCookie&callback=passCookie'); 
    document.getElementsByTagName("head")[0].appendChild(newfile); 
</script> 

और पेज first.com/doAjax?getCookie ऐसा कर सकता है:

 passCookie({'name':'mycookie', 'value':'myvalue'}); 
+3

स्पष्ट रूप से यह विधि केवल फ़ायरफ़ॉक्स में काम करती है, मैंने इसे सफारी और आईई 6 में परीक्षण किया है, दोनों कुकीज सेट/प्राप्त करने में सक्षम नहीं लग रहे हैं ... –

+0

मैं एक अलग डोमेन से कुकीज़ पढ़ने के लिए स्क्रिप्ट टैग का उपयोग नहीं कर सकता, है ना? मुझे वास्तव में अपनी कुकीज़ को पढ़ने के लिए पहले.com पर होना चाहिए, मैं कुकीडाटा प्राप्त करने के लिए दूसरे.com पर सिर्फ एक स्क्रिप्ट टैग नहीं जोड़ सकता ... इसलिए मुझे एक आईफ्रेम का उपयोग करने की आवश्यकता है, या मुझे नहीं पता ... शायद मैं आपका जवाब समझ में नहीं आया, मुझे बताएं। –

+0

आप कुकी मूल्यों को पढ़ने के लिए तकनीकी रूप से एक स्क्रिप्ट टैग का उपयोग नहीं कर रहे हैं, स्क्रिप्ट को आपके पृष्ठ में शामिल किया गया है, इसलिए यह एक ही दायरे में है और दूसरे.com –

0

first.com को यह पीएचपी फ़ाइल रखो:

//readcookie.php  
echo $_COOKIE['cookiename']; 

दूसरे.com पर आप मूल्य प्राप्त करने के लिए इस जावास्क्रिप्ट का उपयोग कर सकते हैं:

function readCookieCallback() 
{ 
    if ((this.readyState == 4) && (this.status == 200)) 
    { 
    alert("the value of the cookie is: "+this.responseText); 
    } 
    else if ((this.readyState == 4) && (this.status != 200)) 
    { 
    //error... 
    } 
} 


function buttonClickOrAnything() 
{ 
    var refreshObject = new XMLHttpRequest(); 
    if (!refreshObject) 
    { 
    //IE6 or older 
    try 
    { 
     refreshObject = new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
    catch (e) 
    { 
     try 
     { 
     refreshObject = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     catch (e) 
     { 
     return; 
     } 
    } 
    } 
    refreshObject.onreadystatechange = readCookieCallback; 
    refreshObject.open("GET", "http://www.first.com/readcookie.php"); 
    refreshObject.send(); 
} 

सादर, रॉबर्ट

+0

मैं रयान डोहेर्टी द्वारा प्रदान की गई विधि के साथ कुकीज़ को ठीक करने में सक्षम हूं, ऐसा लगता है कि सफारी को छोड़कर यह अधिकांश ब्राउज़र पर एसईटी कुकीज़ भी करता है। –

+1

यह मेरे लिए काम नहीं किया। मुझे क्रोम में प्रतिक्रिया मिली: XMLHttpRequest https://second.com/test.php लोड नहीं कर सकता है। उत्पत्ति https://first.com को एक्सेस-कंट्रोल-अनुमति-उत्पत्ति द्वारा अनुमति नहीं है। – Volomike

+0

यह एक कोर मुद्दा है। कुकी मुद्दे से असंबंधित। – germs12

-2

कुकी सेट करने के रूप में निम्नानुसार आप मेरी स्क्रिप्ट बदल सकते हैं के लिए:

नई पीएचपी-स्क्रिप्ट:

//writecookie.php 
setcookie($_GET['c'], $_GET['v']); 

और जावास्क्रिप्ट:

function buttonClickOrAnything() 
{ 
    var refreshObject = new XMLHttpRequest(); 
    if (!refreshObject) 
    { 
    //IE6 or older 
    try 
    { 
     refreshObject = new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
    catch (e) 
    { 
     try 
     { 
     refreshObject = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     catch (e) 
     { 
     return; 
     } 
    } 
    } 
    refreshObject.open("GET", "http://www.first.com/writecookie.php?c=cookiename&v=cookievalue"); 
    refreshObject.send(); 
} 

यह सभी ब्राउज़रों पर काम करना चाहिए।

+4

नहीं, AJAX कॉल को क्रॉस-डोमेन की अनुमति नहीं है ... –

+0

@LucaMatteis ... जब तक CORS (http://dev.w3.org/2006/waf/access-control/) सक्षम नहीं है। – Stephan

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