2012-01-14 18 views
47

मेरे पास एक क्रॉस-डोमेन AJAX GET है जो सफलतापूर्वक प्री -28 हो जाता है, लेकिन कुकीज़ GET अनुरोध से संलग्न नहीं होती है। जब उपयोगकर्ता लॉग इन बटन पर क्लिक करता है, तो उपयोगकर्ता को लॉग इन करने के लिए POST बनाया जाता है, जो सही ढंग से डोमेन को पार करता है। जावास्क्रिप्ट है:सीओआरएस अनुरोध - कुकीज़ क्यों नहीं भेजी जाती हैं?

function signInSuccess() { 
    $.ajax(current_user_url, { 
     type: "GET", 
     contentType: "application/json; charset=utf-8", 
     success: function(data, status, xhr) { 
      displayWelcomeMessage(); 
     }, 
     beforeSend: function(xhr) { 
      xhr.withCredentials = true; 
     } 
    }); 
} 
:

Set-Cookie:user_token=snippysnipsnip; path=/; expires=Wed, 14-Jan-2032 16:16:49 GMT 

साइन-इन सफल होती है एक जावास्क्रिप्ट GET अनुरोध वर्तमान उपयोगकर्ता के जानकारी प्राप्त करने के लिए किया जाता है:

 $.ajax(signin_url, { 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      data: JSON.stringify(credentials), 
      success: function(data, status, xhr) { 
       signInSuccess(); 
      }, 
      error: function(xhr, status, error) { 
       signInFailure(); 
      }, 
      beforeSend: function(xhr) { 
       xhr.withCredentials = true 
      } 
     }); 

प्रतिक्रिया हेडर एक कुकी शामिल

सीओआरएस से संबंधित हेडर क्रोम के विकल्प अनुरोध से लौटे हैं:

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:X-Requested-With, X-Prototype-Version, Content-Type, Origin, Allow 
Access-Control-Allow-Methods:POST, GET, OPTIONS 
Access-Control-Allow-Origin:http://192.168.0.5 
Access-Control-Max-Age:1728000 

हालांकि, जीईटी अनुरोध पर कोई कुकीज़ नहीं भेजी जाती है।

उत्तर

65

मुद्दा jQuery कॉल के साथ था - ऐसा लगता है के बाद से 1.5 withCredentials के रूप में निर्दिष्ट किया जाना चाहिए:

 $.ajax("http://localhost:3000/users/current", { 
      type: "GET", 
      contentType: "application/json; charset=utf-8", 
      success: function(data, status, xhr) { 
       hideAllContent(); 
       $("#sign_out_menu_item").show(); 
       $("#sign_in_menu_item").hide(); 
       $("#welcome").text("Welcome " + data["username"] + "!"); 
       $("#welcome").show(); 
      }, 
      xhrFields: { 
       withCredentials: true 
      }, 
      crossDomain: true 
     }); 
+6

इस काम करने के लिए हो रही है पर 4 घंटे बिताए हैं। इच्छा है कि मैंने पहले इस पोस्ट को देखा था। धन्यवाद! – ChrisRich

+0

पुट/विकल्प एक ही तरीके से काम नहीं कर रहे हैं। GET/POST के लिए कुकीज़ क्यों भेजी जाएंगी लेकिन पुट प्रीफलाइट विकल्प अनुरोध नहीं? –

+2

कुकीज़ स्थानीयहोस्ट पर काम नहीं कर रहे हैं (सेट नहीं किया जा रहा है)। यदि आपको स्थानीय रूप से कुकीज़ का उपयोग करने की आवश्यकता है तो इसके बजाय आईपी-आधारित डोमेन का उपयोग करें (उदा। '127.0.0.1')। – Dziamid

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