2011-01-15 11 views
58

मैं कैनवास अनुप्रयोगों के बारे में फेसबुक के दस्तावेज़ीकरण को पढ़ रहा था और मैं एक उदाहरण आवेदन में आया: http://developers.facebook.com/docs/samples/canvas। जैसा कि मैंने उनके उदाहरण के माध्यम से पढ़ा, हालांकि, मैं आईफ्रेम एप्लिकेशन में कुकीज़ के उपयोग के बारे में बहुत उलझन में आया।फेसबुक कैनवास पृष्ठों पर iFrames के लिए क्रॉस-डोमेन कुकीज़ कैसे सेट करता है?

एक छोटी सी पृष्ठभूमि की कहानी ...

मैं पहले से ही साथ एम्बेड विजेट्स के लिए iframes (फेसबुक से संबंधित नहीं) का उपयोग कर के साथ चारों ओर खेला था और मुझे पता चला कुछ ब्राउज़रों (क्रोम, सफारी, आदि) सख्त कुकी नीतियां होती हैं और iframes में सेट क्रॉस-डोमेन कुकीज को सेट करने की अनुमति न दें (दूसरी तरफ फ़ायरफ़ॉक्स, iframes को iframes में क्रॉस-डोमेन कुकीज़ सेट करने की अनुमति देता है)। उदाहरण के लिए, अगर foo.com के पास src="http://bar.com/widget" के साथ आईफ़्रेम है, तो iframe विजेट bar.com के लिए कोई भी कुकी सेट करने में सक्षम नहीं होगा और इसलिए iframe के भीतर स्थायी स्थिति में परेशानी होगी: bar.com प्रत्येक अनुरोध (AJAX अनुरोध सहित) की व्याख्या करेगा। एक स्थापित सत्र के बिना विजेट से एक ताजा अनुरोध के रूप में। मैं संघर्ष कर रहा था, और इसके बजाय foo.com के लिए कुकीज़ सेट करने के लिए जेएसओएनपी और जावास्क्रिप्ट का उपयोग करके इस तरह से एक रास्ता मिला ...

... और इसलिए?

ठीक है, मैं उदाहरण कैनवास आईफ्रेम फेसबुक एप्लिकेशन देख रहा था और मैंने देखा कि उनका एप्लिकेशन (runwithfriends.appspot.com पर होस्ट किया गया) एक कुकी, u सेट करने में सक्षम है, वर्तमान उपयोगकर्ता की आईडी के साथ कुछ अन्य runwithfriends.appspot.com डोमेन के लिए पैरामीटर। यह इस कुकी को हर अनुरोध के साथ भेजता है ... और यह क्रोम और फ़ायरफ़ॉक्स दोनों में काम करता है! WTF? क्रोम पर क्रॉस-डोमेन कुकी प्रतिबंधों के आसपास फेसबुक कैसे मिलता है?

(मैं पहले से ही अब इस सवाल का जवाब पता है, लेकिन मैंने सोचा था कि यह सहायक किसी को भी एक ही बात यह पता लगाने के लिए संघर्ष कर के लिए हो सकता है -। मैं नीचे इस सवाल का जवाब पोस्ट करेंगे)

+0

अद्यतन: कुछ ब्राउज़रों के नवीनतम संस्करण (ओएस एक्स पर सफारी v6.x +, आईओएस 6+ पर सफारी, और मैं जल्द ही क्रोम और एफएफ मानता हूं) पोस्ट-टू-आईफ्रेम अनुरोधों पर भी क्रॉस-डोमेन कुकीज़ की सेटिंग करने की अनुमति न दें। –

उत्तर

59

तो iFrame वास्तव में नहीं है runwithfriends.appspot.com डोमेन के लिए u कुकी सेट करना। फेसबुक क्या करता है यह एक फॉर्म बनाता है, <form action="runwithfriends.appspot.com/..." target="name_of_iframe" method="POST"> और पेज लोड पर फॉर्म जमा करने के लिए जावास्क्रिप्ट का उपयोग करता है। चूंकि फॉर्म का लक्ष्य आईफ्रेम है, इसलिए यह पृष्ठ को पुनः लोड नहीं करता है ... यह पोस्ट की प्रतिक्रिया के साथ आईफ़्रेम लोड करता है। स्पष्ट रूप से क्रोम और सख्त कुकी नीतियों वाले अन्य ब्राउज़र भी क्रॉस डोमेन अनुरोधों के लिए कुकी सेट करते हैं यदि वे POST अनुरोध हैं ...

+2

मैंने यह प्रदर्शित करने के लिए अवधारणा sinatra ऐप का सबूत बनाया है कि यह कैसे काम करता है: https://github.com/agibralter/iframe-widget-test –

+0

अरे हारून, क्या आपके पास इस कोड/डेमो का शुद्ध जावास्क्रिप्ट संस्करण है? – lshettyl

+2

@LShetty - क्षमा करें, मुझे यकीन नहीं है कि मैं समझता हूं कि आपका क्या मतलब है ... शुद्ध जावास्क्रिप्ट? डेमो का रूबी हिस्सा वेब सर्वर के रूप में कार्य करता है ... क्या आपका मतलब है कि आप Node.js में लिखे गए डेमो को देखना चाहते हैं? –

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