मुझे क्रॉस-डोमेन AJAX अनुरोधों के साथ कोई समस्या है।
इस मुद्दे में तीन सर्वर शामिल हैं। हम उन्हें ए 1, ए 2, और बी पर कॉल कर सकते हैं।
A1 और ए 2 एक ही आवेदन कोड चल रहे हैं। वे एक ही वेब अनुप्रयोग के दो चरणबद्ध उदाहरण हैं। बी एक और वेब अनुप्रयोग है।
हम बी आवेदन करने के लिए एक वेब अनुप्रयोग से एक क्रॉस-डोमेन AJAX अनुरोध करने के लिए की जरूरत है। हमने सीओआरएस को सक्षम करने के साथ प्रयोग किया लेकिन आईई < = 8 में संतोषजनक ढंग से काम करने में कठिनाइयों का सामना करना पड़ा, इसलिए अब हम एक nginx proxying नियम का उपयोग कर रहे हैं। प्रवाह इसलिए है: ब्राउज़र ajax अनुरोध ->A1 या ए 2 -> nginx प्रॉक्सी ->बी
बी स्टेटफुल है और कार्य करने के लिए उपयोगकर्ता के सत्र कुकी की आवश्यकता है।
हम जो देख रहे हैं कि इस ठीक से काम करता है जब सर्वर A1 का उपयोग कर, लेकिन जब सर्वर ए 2, बी का उपयोग कर कुकीज़ बाहर खींच नहीं कर सकता है।
मैं अनुरोध A1 और से आने वाले ए 2 के लिए हेडर पर ध्यान दिया है और वे एक ही हैं। दोनों शीर्ष लेख में कुकीज़ लाइन आदि
है, दोनों एक ही मूल है, बी पर क्या हम देखते हैं कि $ _COOKIE [ 'session_key'] खाली जब अनुरोध से आता है ए 2 लेकिन ठीक से भर जाता है जब अनुरोध ए 1 से आता है।
अजीब बात यह है कि हेडर में कुकीज़ से बाहर एक विशेष कुकी कुंजी खींचने में केवल गायब है, और केवल तभी जब अनुरोध ए 2 से आता है। यह ए 2 ठीक से हेडर में हर दूसरी कुकी को पार करता है, यह किसी कारण से उपयोगकर्ता की सत्र कुकी को पार्स नहीं कर सकता है, लेकिन अगर अनुरोध ए 1 से आता है तो यह ठीक हो सकता है।
मैंने टीसीपीडम्प का उपयोग किया है और इनमें से प्रत्येक का पीसी लिया है और उन्हें अलग किया है और हेडर में कुछ भी विशेष रूप से अलग दिखता है।
मुझे यह स्टैक ओवरफ़्लो प्रश्न मिला और लोगों ने कहा कि ऐसा इसलिए था क्योंकि उनकी कुकी हेडर स्ट्रिंग बहुत लंबी थी: What could cause cookie to not be set in $_COOKIE when it's in $_SERVER मुझे नहीं लगता कि यह बहुत लंबा है क्योंकि मेरा सफल और असफल दोनों मामले में केवल 24 9 वर्ण लंबा है।
मैं बिंदु जहां मैं उन्हें पार्स करने $ _SERVER से बाहर कुकीज़ फाड़ पर विचार कर रहा हूँ और मैन्युअल रूप से कर रहा हूँ लेकिन वह वास्तव में बेवकूफ लग रहा है और मैं अंतर्निहित मुद्दे यह पता लगाने की पसंद करेंगे।
उपयोगकर्ता को ए 1 और ए 2 सर्वर दोनों पर सेट करने के लिए सेट नहीं किया जाता है? सर्वर पर सत्र डेटा कैसे बनाया जा रहा है? क्या वे एक ही मशीन हैं? – voncox