2010-04-22 6 views
15

पर जारी नहीं है मेरे पास एकाधिक PHP पृष्ठों के साथ एक फेसबुक इफ्रेम एप्लिकेशन है।सफारी सत्र वैरिएबल में एकाधिक पृष्ठों के साथ फेसबुक इफ्रेम ऐप

मेरे पास कुछ लिंक हैं जो मेरे "iframe फ़ोल्डर" के अंदर फ़ाइलों के अपेक्षाकृत इंगित करते हैं।

iframe के अंदर सत्र चर के साथ कुछ समस्याएं होने के बाद। मैंने कुछ सत्र चर सेट किए हैं लेकिन वे एक पृष्ठ से दूसरे पृष्ठ पर नहीं बने रहते हैं।

यह अन्य ब्राउज़रों पर काम करता है।

मैं पढ़ रहा हूं कि सफारी क्रॉस-डोमेन कुकीज़ का समर्थन नहीं करती है और यह समस्या हो सकती है, लेकिन मुझे यह सुनिश्चित नहीं है कि इसे कैसे ठीक किया जाए।

कोई मदद?

+0

क्या आपको कोई समाधान मिला? – cdpnet

उत्तर

10

मैंने the blog post लिखा है डोमिनिक अपने जवाब में संदर्भित करता है।

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

आपके PHP कोड को उस पृष्ठ के लिए एक पृष्ठ को दूसरे पृष्ठ पर जारी रखने के लिए सत्र का उपयोग करने वाले पहले पृष्ठ पर एक कुकी सेट करने की आवश्यकता है, लेकिन यदि सत्र चर IFRAME में पहले पृष्ठ में हैं, तो आपके पास एक चिकन और अंडे की समस्या।

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

यह आपके PHP सत्र की मदद नहीं करेगा, हालांकि, मैं पहले पृष्ठ पर लिंक पर एक और पैरामीटर जोड़ने का सुझाव देता हूं जो दूसरे पृष्ठ को सत्र को देखने की अनुमति देता है, या अन्यथा इसे फिर से बना देता है।

+0

स्टीव, मैं सिंगल-साइन ऑन फेसबुक प्रमाणीकरण का उपयोग कर रहा हूं। फेसबुक एकल होस्ट पर प्रदान करने के लिए मेरे होस्ट किए गए डोमेन के लिए कुकी सेट करता है। लेकिन, जैसा आपने बताया है, सफारी इसे अस्वीकार कर देगा। और ऐप को फेसबुक से कोई कुकी की समस्या के साथ छोड़ दिया गया है। अगर मैं कुकी सेट कर रहा था, तो यह अलग परिदृश्य है। – cdpnet

+0

क्या कोई यह पुष्टि कर सकता है कि यह समाधान हालिया सफारी संस्करणों में काम नहीं करता है? – Eydun

+2

यह तकनीक सफारी 6 –

11

मेरा मानना ​​है कि यह समाधान सफारी के नवीनतम (6.0 और बाद के) संस्करणों के साथ अप्रचलित हो गया है।

डिफ़ॉल्ट रूप से सफारी कुकीज़ को तृतीय पक्षों से सेट करने की अनुमति नहीं देता है। यह फेसबुक आईफ्रेम अनुप्रयोगों को प्रभावित करता है क्योंकि उपयोगकर्ता apps.facebook.com से प्रदत्त पृष्ठ तक पहुंच रहा है लेकिन इस मामले में "तीसरी पार्टी" yourdomain.com से आईफ़्रेम की सेवा की जा रही है।

वेब के आसपास कई सारे समाधान बताए गए हैं। सबसे अच्छा मैंने पाया है और miscellaneous issues की सूची में फेसबुक द्वारा अनुशंसित एक JQuery का उपयोग करके yourdomain.com पर एक POST अनुरोध नकली है। Anant Garg द्वारा विस्तृत यह समाधान अलग-अलग होस्ट/आईफ्रेम डोमेन के लिए सामान्य रूप से काम करता है और फेसबुक ऐप्स के लिए अनुकूलित किया जाना आवश्यक है। मुख्य भागों हैं:

$("body").append(' 
<iframe id="sessionframe" name="sessionframe" onload="submitSessionForm()" src="http://www.yourdomain.com/blank.php" style="display:none;"></iframe> 
<form id="sessionform" enctype="application/x-www-form-urlencoded" 
    action="http://www.yourdomain.com/startsession.php" 
    target="sessionframe" method="post"></form>'); 
var firstTimeSession = 0; 
function submitSessionForm() { 
    if (firstTimeSession == 0) { 
    firstTimeSession = 1; 
    $("#sessionform").submit(); 
    } 
} 

Will Henderson द्वारा एक अन्य समाधान साधन करने के लिए एक जावास्क्रिप्ट समारोह का उपयोग कर सत्र जानकारी के साथ अपने पृष्ठ के प्रत्येक लिंक है। फिर जीईटी पैरामीटर से इसे पढ़कर इस सत्र की जानकारी को कैप्चर करने के लिए अपने सर्वर कोड को संशोधित करें।

+3

में काम नहीं करती जोनाथन काम नहीं करती है! –

+0

@ UğurÖzpınar हाँ, पृष्ठों के बीच सत्र को पारित करने के अलावा अब कोई सहारा नहीं है। हाल ही में Google गोपनीयता उल्लंघनों के साथ सफारी ने गलत पोस्ट को ठीक किया है। – kniteli

0

और सभी इनपुट के लिए धन्यवाद। मैंने प्रत्येक पृष्ठ पर "हस्ताक्षर_रेक्वेस्ट" पैरामीटर को जोड़कर समस्या को हल करना समाप्त कर दिया। मैंने इसे एक छिपे हुए क्षेत्र के रूप में रखा है और इसे पीछे कोड में सेट किया है। इस तरह मैं सफारी में काम करने में कामयाब रहा। उम्मीद है कि यह आपके लिए भी उपयोगी होगा।

+0

इस उत्तर के लिए धन्यवाद! इतना आसान! =) लेकिन चूंकि इस जवाब को बहुत कम कर दिया गया है, मुझे आश्चर्य है कि डाउनसाइड्स क्या हैं? (मुझे लगता है कि मैं जल्द ही पता लगाऊंगा ...) –

+1

आपने sign_request पैरामीटर का उपयोग कैसे किया? क्या कोई कोड उदाहरण है? क्या यह तकनीक अब और काम करती है? –

0

यदि आप .NET का उपयोग करते हैं तो इस समस्या का एक बहुत आसान समाधान है।

बस अपने web.config में cookieless को झूठी सेट करें। उदाहरण के लिए:

sessionState mode="InProc" cookieless="true" timeout="60" 

इसका एक iframe पोस्ट करते समय या iframe के यूआरएल के साथ एक पॉपअप विंडो खोलने की तुलना में बहुत आसान।

तरह सादर,

डेविड

+1

मेरे पास मेरी परियोजना में तृतीय पक्ष कुकीज़ के साथ समान समस्या है। लेकिन इस समाधान ने मेरी मदद नहीं की ... मैंने कुकियस को झूठी, यूसुरी, ऑटोडेक्टेड सेट करने की कोशिश की। लेकिन मुझे अपवाद मिल रहा है।शायद यह एक कारण है: "जब आप AJAX- सक्षम ASP.NET वेबसाइट को कॉन्फ़िगर करते हैं, तो cookieless विशेषता के लिए केवल UseCookies के डिफ़ॉल्ट मान का उपयोग करें। URL में एन्कोड किए गए कुकीज़ का उपयोग करने वाली सेटिंग्स ASP.NET AJAX द्वारा समर्थित नहीं हैं क्लाइंट स्क्रिप्ट पुस्तकालयों। " –

1

मुझे लगता है कि सबसे अच्छा समाधान मैन्युअल session_start(); कॉल करने से पहले सत्र आईडी अर्थात का ट्रैक रखने के session_id($_GET['session]); का उपयोग कर बस सुनिश्चित करें कि आप ऐसा करते हैं बनाने के द्वारा होता है और सब कुछ काम करता है।

1

सफारी केवल उस पृष्ठ से कुकीज़ स्वीकार करता है जिस पर उपयोगकर्ता नेविगेट किया है। इसे ठीक करने का सबसे आसान और सबसे प्रभावी तरीका top.location.href का उपयोग करके अपने डोमेन पर एक अलग पृष्ठ पर अपने कैनवास ऐप के लैंडिंग पृष्ठ से अनुरोध को पुनर्निर्देशित करना है और उपयोगकर्ता को उस पृष्ठ से कैनवास ऐप पर रीडायरेक्ट करना है।

उदाहरण के लिए, यदि abc.php आपका लैंडिंग पृष्ठ है और कैनवास यूआरएल facebook.com/abc है। पहले abc.php से अनुरोध को xyz.php जैसे किसी भिन्न पृष्ठ पर रीडायरेक्ट करें, फिर xyz.php से facebook.com/abc पर रीडायरेक्ट करें। Xyz.php में सत्र शुरू करने के लिए मत भूलना।

यह आसानी से ठीक है ...

-1

मैं PHP के साथ इस शीर्ष लेख, कि मेरी समस्याओं

if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE')) header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); 
0
सफारी 7 की रिलीज के साथ

तय करते थे, न केवल 3 पार्टी कुकी अवरुद्ध किया जा रहा है। स्थानीय संग्रहण के साथ-साथ वेबडीबी, किसी भी प्रकार का वेबसाइट डेटा अवरुद्ध किया जा रहा है। जब आप सफारी प्राथमिकताएं (सीएमडी + कॉमा) पर जाते हैं, तो सफारी 7 पर, गोपनीयता टैब के तहत, अब यह कहता है: "ब्लॉक कुकीज़ और अन्य वेबसाइट" मूल रूप से "ब्लॉक कुकीज़" थी। यह परिवर्तन की पुष्टि करता है।

अन्य ब्राउज़र भविष्य में अनुसरण कर सकते हैं। शायद फ़ायरफ़ॉक्स। क्रोम, खांसी * खांसी * शायद नहीं।

आपको शायद रीडायरेक्शन तकनीक या पॉपअप का उपयोग करके कुछ कार्यवाही करने के लिए कुछ कामकाज करना होगा।

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