जीत मेरी है!
वहाँ है कि मैं एक पाया iframe सत्र के साथ काम कर एक लगभग पूर्ण undocumented फेसबुक सुविधा है, के लिए अस्पष्ट संदर्भ मेरी अनुसंधान के क्षेत्र में। यह पृष्ठ वास्तव में अच्छी तरह तथापि, और केवल मेरे iframe में विभिन्न सत्र कुंजियों देखने का कई घंटे के बाद यह स्पष्ट नहीं होता मैं यह पता लगाने की क्या चल रहा था सक्षम था।
इससे पहले, मेरी आइफ्रेम एप्लिकेशन के सामान्य दौर प्राप्त था fb_whateverमापदंडों जब प्रारंभिक आइफ्रेम लोड हो गई। तो अपने आवेदन में, मैं हर अनुरोध पर इस कर रहा था:
if (isset($_REQUEST['fb_sig_session_key'])) {
$_SESSION['fb_sig_session_key'] = $_REQUEST['fb_sig_session_key'];
}
if (! empty($_SESSION['fb_sig_session_key'])) $this->facebook->api_client->session_key = $_SESSION['fb_sig_session_key'];
इस कोड प्राप्त होगा fb_sig_session_keyप्रारंभिक एप्लिकेशन लोड पर, और मैं इसे दूर गिलहरी हैं एक स्थानीय में $_SESSIONAPI के साथ उपयोग के लिए। क्योंकि स्थानीय सत्र में भंडारण, जरूरी है कि fb_sig_session_keyफिर से में पारित हो जाता है कभी नहीं जब तक आप पूरे एप्लिकेशन आइफ्रेम लोड करें।
तो समस्याएं सामने आईं जब इस सत्र कुंजी लगभग एक घंटे के बाद समाप्त हो गई है।
को देखने के बाद अस्पष्ट संदर्भ पेज , मैं सभी की जांच शुरू कर दिया $_REQUESTचर मैं हो रही थी। ऐसा लगता है कि यहां तक कि अपने आइफ्रेम ऐप्लिकेशन के अंदर एक आंतरिक लिंक पर, फेसबुक कुछ मानकों साथ दी जाने वाली अनुरोध संशोधित करता है। किसी कारण के लिए, वे एक है पूरी तरह से अलग, लेकिन यह भी वैध सत्र कुंजी है कि हर आइफ्रेम अनुरोध के साथ आता है!
यह पैरामीटर आपके Facebook अनुप्रयोग api कुंजी के नाम पर है। इसलिए यदि आपके आवेदन API कुंजी "xyz123" है, अपने iframe के भीतर प्रत्येक अनुरोध नामक पैरामीटर हो जाता है xyz123_session_key(और साथ ही कुछ अन्य लोगों की तरह, xyz123_expiresऔर xyz123_user)।
मुख्य सत्र (मूल के लिए जुड़े समाप्ति समय देखने के बाद fb_sig_session_key) और इस iframe-केवल सत्र ( xyz123_session_key), सुरंग के अंत में प्रकाश दिखाई दिया: iframe-केवल सत्र कुंजी समाप्ति समय वास्तव में कभी-कभी अद्यतन हो जाता है । मैं निर्धारित किया है नहीं है जब या कैसे (मुझे लगता है यह कुछ बिंदु पर एक अजाक्स पिंग है), लेकिन फिर भी, यह ताज़ा करता है।
मैं मूल के लिए इंतजार कर रहे थे fb_sig_session_keyसत्र समाप्त होने को है, और मेरे एप्लिकेशन में यकीन है कि पर्याप्त दोस्त-संबंधी पृष्ठों त्रुटियों खाँसी शुरू कर दिया। उस समय, मैं करने के लिए iframe-केवल नए मेरी स्थानीय रूप से संग्रहीत सत्र कुंजी बंद xyz123_session_keyहै, और समस्या को हल किया गया था। यही कारण है कि सत्र मूल रूप में अच्छी तरह से बस के रूप में काम करता है!
तो, मेरा अंतिम कोड ठीक इस प्रकार सत्र कुंजी स्थानीय रूप से संग्रहीत करने के लिए है:
$iframeSessionKeyName = $CONFIG['facebook']['apiKey'] . '_session_key';
if (isset($_REQUEST[$iframeSessionKeyName])) {
$_SESSION['fb_sig_session_key'] = $_REQUEST[$iframeSessionKeyName];
}
else if (isset($_REQUEST['fb_sig_session_key'])) {
$_SESSION['fb_sig_session_key'] = $_REQUEST['fb_sig_session_key'];
}
if (! empty($_SESSION['fb_sig_session_key'])) $this->facebook->api_client->session_key = $_SESSION['fb_sig_session_key'];
यह "आइफ्रेम केवल-" कुंजी को प्राथमिकता देता है।
संपादित करें: मेरी मूल धारणा है कि "आइफ्रेम केवल-" कुंजी अजाक्स विधि के कुछ प्रकार के माध्यम से अद्यतन किया गया था गलत था, यह पता चला है इन मूल्यों को फेसबुक से एक कुकी में स्थापित कर रहे हैं। यह जब इन कुकीज़ का उपयोग कर कुछ क्रॉस-डोमेन समस्याओं को जन्म देता। एक की स्थापना पी 3 पी कुकी नीति अधिकांश ब्राउज़र के साथ इस को कम होगा, सफारी को छोड़कर। अभी भी सफारी के लिए कोई अच्छा काम के आसपास है।