2012-01-12 14 views
6

का उपयोग कर मैं एक jQuery ajax() कॉल कैसे कोड कर सकते हैं (उदाहरण के लिए XMLHttpRequest) सत्र आईडी संरक्षित करने के लिए (उदाहरण के लिए पहले से ही 'jsessionid' कुकी भेज ब्राउज़र की कुकी में)का दोबारा उपयोग jQuery

ajax XMLHttpRequest पर jsessionid हमारे संदर्भ:

  • दो जावा आधारित वेब अनुप्रयोगों
  • एसएसओ तंत्र दोनों अनुप्रयोगों में उपयोगकर्ता के लॉग
  • एक (यानी आवेदन एक और आवेदन बी के साथ सत्र 202 के साथ सत्र 101 है) pplication 'ए' जावास्क्रिप्ट (jQuery) का उपयोग करता है बाकी (fwiw)
  • सभी मिलता है और "ओल्ड-स्कूल फ़ॉर्म पोस्ट" आवेदन एक से बी को कनेक्ट
  • आवेदन बी जावा जर्सी में बाकी एपीआई लागू किया आवेदन बी को कॉल करने के लिए "सत्र बी"
  • XmlHttpRequests (उदा। jquery 'AJAX()' कॉल) सत्र # 202 का पुन: उपयोग नहीं करते हैं। प्रत्येक XmlHttpRequest को एक नया सत्र

नए सत्र क्यों?

कारण: XmlHttpRequest आवेदन करने के लिए किसी भी कुकीज़ को पास नहीं करता है। Servlet कंटेनर कुकी में jsessionid सेट करता है। सर्वर jsessionid

इसके विपरीत नहीं मिलता है, JSONP कॉल (जो गतिशील < स्क्रिप्ट src = उत्पन्न "http: //server/b/page.x" >) कुकीज़ पारित करते हैं।

सवाल

  • ajax XMLHttpRequest प्राप्त करने के लिए सबसे आसान तरीका है लक्ष्य आवेदन करने के लिए सत्र id (कुकीज़) बढ़ाने के लिए बुलाता है?
  • AJAX, कुकी, xmlhttprequest, और REST पर कोई अच्छा संदर्भ?
  • कोई भी आरईएसटी एपीआई डिजाइन और प्रमाणीकरण पर पढ़ने की सिफारिश कर सकता है?

वेब सत्र, राज्य, और प्रमाणीकरण

मैं जानता हूँ कि बाकी राज्यविहीन माना जाता है, और फिर से उपयोग कर वेब सत्र को कुछ हद तक कमजोर लगता है (यानी के रूप में OAuth और प्रमाणीकरण टोकन का उपयोग कर का विरोध किया, करता है नेटफ्लिक्स)

यह पहला पुनरावृत्ति है और हम चीज़ें "ऊपर और चलने" के करीब थे। यह JSONP के साथ ठीक काम करता है, लेकिन XmlHttpRequest पोस्ट विफल रही। पहले से

धन्यवाद

अद्यतन:

एक अनुभवहीन वास्तव में सवाल।

यह पता चला है कि xmlhttprequest/AJAX के माध्यम से क्रॉस-साइट पोस्टिंग में अंतर्निहित सुरक्षा समस्याएं और कामकाज हैं। फ़ायरफ़ॉक्स, उदाहरण के लिए, XmlHttpRequest के साथ कुकीज पास नहीं करेगा जबतक कि आप विशेष शीर्षलेख जोड़ते हैं।फिर फ़ायरफ़ॉक्स सर्वर पर "प्री-फ्लाइट चेक '(यानी एक http विकल्प कॉल) करेगा" यह ठीक है? "। फ़ायरफ़ॉक्स आपके "कुकीज के साथ पोस्ट" करने से पहले आपके सर्वर को "विकल्प" कॉल का जवाब देना होगा "हाँ यह ठीक है"।

आईई और फ़ायरफ़ॉक्स इन समस्याओं को अलग-अलग हल करते हैं (यानी 1 99 8 के आसपास जावास्क्रिप्ट की तरह थोड़ा)। मैं नहीं जानता कि आईई क्या करता है, लेकिन 1 99 8 के माध्यम से रहता है, हम वास्तव में उस सड़क पर वास्तव में नीचे जाना नहीं चाहते हैं।

हमने एक कामकाज को कोड किया।

हमारी टीम में से कोई भी यह नहीं जानता था जब हमने कोडिंग शुरू की थी। (यानी "jsonp प्रोटोटाइप में महान काम किया, सब कुछ भी चाहिए")

संदर्भ: कैसे मोज़िला इस समस्या (http हेडर और preflight चेक) के पते https://developer.mozilla.org/En/HTTP_access_control

क्रॉस ओरिजिन रिसोर्स शेयरिंग: http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

+0

क्या आप बताए गए कामकाज का वर्णन कर सकते हैं? – jmend

+0

हमने एसएसओ प्रमाणीकरण टोकन को एक अनुरोध पैरामीटर के रूप में पारित किया और इस पैरामीटर की जांच के लिए सर्वर-पक्ष को संशोधित किया। यह थोड़ा सा हैकिश गंध, लेकिन लगातार और सीधा था। हमने * पैरामीटर के रूप में टॉमकैट के jsessionId को पास करने की कोशिश नहीं की क्योंकि यह काम नहीं करेगा। – user331465

+0

धन्यवाद, यह समझ में आता है। – jmend

उत्तर

1

आप एक राज्य-पूर्ण प्रॉक्सी को तैनात करके भी इस समस्या को हल कर सकते हैं। उन्हें दोनों ऐप्स पर स्थापित करना होगा। फिर आप प्रॉक्सी के माध्यम से अपने सभी सत्र-आधारित कॉल करेंगे और दूरस्थ सत्र डेटा को अपने स्थानीय प्रॉक्सी सत्र में संग्रहीत करेंगे।

+0

दिलचस्प और उपयोगी विचार। क्या आप एक ओपन सोर्स स्टेटफुल प्रॉक्सी को इंगित कर सकते हैं। साथ ही, स्पष्टीकरण के लिए, क्या आपका मतलब है कि "स्थिर सामग्री", यानी सीएसएस/जीआईएफ/जेपीजी इत्यादि को छोड़कर, "सभी एप्लिकेशन http कॉल इस स्टेटफुल प्रॉक्सी से गुज़रेंगे" – user331465

+0

हां, आपके अन्य ऐप पर आपका http कॉल होगा यह प्रॉक्सी आप प्रॉक्सी कुछ प्रकार के कर्ल प्रोटोकॉल का उपयोग करके लिखा जाएगा। – jonycheung

+0

http://stackoverflow.com/questions/5731815/php-curl-proxy-how-to-make-multi-user-cookie-jar एक अच्छा संदर्भ है। Php curl संदर्भ http://php.net/manual/en/function.curl-setopt.php पर भी देखें। आपको मूल रूप से एक प्रॉक्सी लिखने की आवश्यकता होती है जो कुकीज़ सहेजती है। मैं देखूंगा कि क्या मुझे पहले लिखा गया प्रॉक्सी का कोड मिल सकता है। – jonycheung

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