2008-10-05 10 views
20

एक रूढ़िवादी कुकी नीति जो कुकी की सीमा के साथ एप्पल developer faqसफारी में iframes के अंदर बाहरी डोमेन से कुकीज़ कैसे सेट करूं?

सफारी जहाजों से केवल पृष्ठों चुना उपयोगकर्ता द्वारा ("पर नेविगेट") करने के लिए लिखता है।

डिफ़ॉल्ट रूप से सफारी केवल उन साइटों से कुकीज़ की अनुमति देता है जिन्हें आप सीधे नेविगेट करते हैं। (यानी यदि आप उस डोमेन नाम के यूआरएल के साथ लिंक पर क्लिक करते हैं)।

इसका मतलब यह है कि आप किसी अन्य साइट से एक पृष्ठ के साथ एक iFrame के साथ अपनी खुद की साइट से एक पृष्ठ लोड करते हैं, कि अन्य साइट, कुकी सेट करने में सक्षम नहीं है अगर। (उदाहरण के लिए, एक टिकटशॉप)। जैसे ही आप सीधे दूसरे डोमेन का दौरा करते हैं, दूसरी साइट अपनी कुकीज़ तक पहुंचने और बदलने में सक्षम होती है।

दूसरी साइट पर कोड तक पहुंच के बिना, मैं उपयोगकर्ता अनुभव को यथासंभव अविभाज्य कैसे बना सकता हूं?

क्या यह देखने के लिए कोई (जावास्क्रिप्ट?) तरीका है कि अन्य साइट की कुकीज़ पहले से सेट हो चुकी है, और तदनुसार, यदि आवश्यक हो तो पहले दूसरी साइट का सीधा लिंक दिखाएं?

अद्यतन:

HTML5 विशेषता 'window.postMessage' एक अच्छा समाधान हो रहा है।
कुछ jQuery पुस्तकालयों कि मदद कर सकता है कर रहे हैं, और सबसे हाल ही में ब्राउज़रों के साथ संगत।
संक्षेप में, iFrame दस्तावेज़,, संदेश भेजता है Json साथ खिड़की तत्व के माध्यम से।

बहुत अच्छा Postmessage-plugin, daepark है, जो मैं काम कर रहा हो गया है।
और एक अन्य jQuery postMessage, बेन Alman से मैंने पाया है, लेकिन परीक्षण नहीं किया।

+0

मुझे यह समस्या भी दिखाई देती है, लेकिन मेरा मानना ​​है कि यह समस्या असुरक्षित कुकीज़ तक ही सीमित है। क्या कोई पुष्टि कर सकता है? – Adam

उत्तर

8

यह एक ही मूल नीति के रूप में जाना एक मुद्दा है। अनिवार्य रूप से यह सुरक्षा की कमी पैदा करने के खिलाफ एक सुरक्षा उपाय है।

जब आपके पास एक आईफ्रेम है जो आपके डोमेन पर किसी पृष्ठ पर इंगित करता है, तो जावास्क्रिप्ट आपके द्वारा बनाए गए पेज और इफ्रेम के भीतर पृष्ठ दोनों तक पहुंच सकता है। बच्चे और बच्चे को माता-पिता के रिश्ते के लिए यह स्वीकार्य माता-पिता है।

(parent doc)  (iframe doc) 
    HTML --> IFRAME <-- HTML 
     ^--------|---------^ 

हालांकि, एक बार आप एक फ़ाइल को किसी बाहरी पृष्ठ की ओर इशारा किया है, एसओपी खेलने में आता है और माता पिता के पेज और iframe पेज के बीच से गुजरने वाली किसी भी जानकारी haults।

(parent doc)  (iframe doc) 
    HTML --> IFRAME <-- HTML 
       X 

आइफ्रेम संचार के बारे में इस पोस्ट चेक आउट, यह भावना का एक बहुत बनाता है! Stackoverflow post

ये लिंक वास्तव में भी मदद करते हैं!

1)Secure Cross-Domain Communication in the Browser
2)wiki SOP or Same Origin Policy

गुड लक!

+0

एनवीएम आपका उत्तर थोड़ा सामान्य है लेकिन एक बिंदु है। एसओपी आपको यह जांचने से रोक देगा कि कुकीज़ मौजूद है या नहीं। या यह वैसे भी होना चाहिए। – wds

+0

मेरा वर्तमान वर्कअराउंड पहले बाहरी पृष्ठ के लिंक के साथ, iframe के अंदर एक स्थानीय पृष्ठ लोड करना है। इस तरह, आगंतुक को उस पृष्ठ पर "नेविगेट" करना पड़ता है और उसके बाद उस साइट के लिए कुकीज़ की अनुमति होती है। जो मैं खोज रहा हूं वह यह जानने का एक तरीका है कि बाहरी पृष्ठ में पहले से ही कुकी-विशेषाधिकार हैं या नहीं, ताकि मैं पहले स्थानीय पृष्ठ को लोड कर सकूं और सीधे बाहरी पृष्ठ दिखा सकूं। – GDmac

3

This page सुझाव देता है कि आप अपने पृष्ठों में कुछ जावास्क्रिप्ट रखें जो हमेशा-वहां कुकी की अनुपस्थिति का पता लगाता है। जब यह पता चलता है कि कुकी सेट नहीं की गई है, तो यह आवश्यक सत्र डेटा को उस पृष्ठ पर पोस्ट करता है जो कुकी सेट करता है, और आपको मूल पृष्ठ पर रीडायरेक्ट करता है।

स्पष्ट रूप से पोस्ट सफारी के 'मैंने इस डोमेन पर नेविगेट किया है' परीक्षण को पूरा करने के लिए पर्याप्त है, इसलिए तब से उस डोमेन से कुकीज़ स्वीकार करता है।

बेशक, यह कोड का सबसे अच्छा नहीं है, लेकिन आपकी समस्या का समाधान हो सकता है।

2

एक समाधान (थोड़ा गन्दा) हो सकता है कि पैरेंट पेज कुकी की उपस्थिति के लिए जांच करे और यदि कुकी मौजूद नहीं है तो iframe पेज के डोमेन पर एक स्क्रिप्ट पर AJAX कॉल चलाएं जो कुकी सेट करता है।

+1

क्या किसी ने यह कोशिश की है (एक पूर्ण पृष्ठ ताज़ा पोस्ट के बजाय AJAX POST के साथ)? यह प्रयाप्त है? –

+0

मुझे काम करने के लिए AJAX पोस्ट नहीं मिल सका, लेकिन असल में आप इसे सरल जीईटी/रीडायरेक्ट कर सकते हैं जहां आप थे। इस उत्तर और इस पर मेरी टिप्पणी देखें: http://stackoverflow.com/a/15889674/361609 – colllin

2

सफारी में प्रदर्शित होने वाले फेसबुक ऐप्स के साथ यह एक आम समस्या है। जिस तरह से कई (स्वयं सहित) ने इस बारे में निपटाया है, वह है कि इफ्रैमड पेज खुद को पोस्ट करें। जब किसी पृष्ठ ने फ़ॉर्म डेटा पोस्ट किया है, तो उसे कुकीज़ सेट करने की अनुमति दी जाती है। अंत में, यह 1 पेज रीफ्रेश के साथ काम करता है, जो आपके उपयोगकर्ता लॉगिन पोस्ट भी हो सकता है।

10

सफारी और सभी आधुनिक ब्राउज़रों द्वारा समर्थित स्थानीय स्टोरेज, iframes में लोड पृष्ठों पर भी पढ़ने/लिखने के संचालन की अनुमति देता है। यदि आप ie6 और ie7 के लिए समर्थन छोड़ने पर ध्यान नहीं देते हैं, तो अपनी फ़्रेम वाली साइट में कुकीज़ के बजाय स्थानीय स्टोरेज का उपयोग करने का प्रयास करें। मुझे पता है कि आपका प्रश्न विशेष रूप से कहता है कि आपके पास फ़्रेमयुक्त साइट पर कोड तक पहुंच नहीं है, लेकिन जो लोग करते हैं, उनके लिए स्थानीय स्टोरेज निश्चित रूप से "सफारी आईफ्रेम में कोई कुकी" समस्या हल नहीं करता है।

+0

+1 भविष्य के भविष्य के दृष्टिकोण के लिए +1 – Paul