एक iframe आवेदन से Facebook सत्र रिफ्रेशिंग

वोट
13

मैं एक Facebook iframe अनुप्रयोग है कि पूरी तरह से बाहरी है मिल गया है। इस से मेरा मतलब है कि एक बार एक उपयोगकर्ता आवेदन लोड करने के लिए कैनवास यूआरएल तक पहुँचता है, iframe अनुप्रयोग में सभी लिंक मेरे सर्वर पर जाएँ, और कैनवास पेज ताज़ा किया जाता है कभी नहीं जब तक कि उपयोगकर्ता फेसबुक पर कहीं पर जाने के लिए वापस आता है (या एक ब्राउज़र रीफ्रेश) करता है।

एप्लिकेशन जहां फेसबुक आइफ्रेम बनाता है के प्रारंभिक लोड पर, मैं fb_sig_user की तरह सभी सामान्य मापदंडों जो मुझे फेसबुक उपयोगकर्ता के आधार पर एक आंतरिक एप्लिकेशन सत्र बनाने की अनुमति देता पारित कर दिया मिलता है। इस एप्लिकेशन को सत्र (जो नहीं फेसबुक सत्र, यह मेरे अपने एप्लिकेशन सत्र है) सब मैं उपयोगकर्ता अनुप्रयोग के साथ काम करने की अनुमति की जरूरत है।

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

मेरा प्रश्न एक iframe आवेदन के भीतर से उपयोगकर्ता के फेसबुक सत्र ताज़ा करने के लिए यह एक घंटे बाद समाप्त हो रही से रखने के लिए एक रास्ता है कि क्या वहाँ है। API कॉल ऐसा करने के किसी भी है? वहाँ कुछ पिंग करने Facebook कनेक्ट चाल है? इसमें जीवित रखने के लिए कोई निश्चित विधि है? मैं किसी भी उदाहरण है कि विशेष रूप से इस का पता लगाने के लिए नहीं कर पाए हैं।

07/05/2009 को 18:38
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
21

जीत मेरी है!

वहाँ है कि मैं एक पाया 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 पी कुकी नीति अधिकांश ब्राउज़र के साथ इस को कम होगा, सफारी को छोड़कर। अभी भी सफारी के लिए कोई अच्छा काम के आसपास है।

08/05/2009 को 00:32
का स्रोत उपयोगकर्ता

वोट
2

रख दो

header('P3P: CP="CAO PSA OUR"');

अपने पृष्ठ के शीर्ष पर हैं और आप iframe में अपने सत्र नहीं खोएंगे।

मैं भी नोटिस किया है कि इस सूत्र अच्छा 2 और एक आधे साल पुराना है। मैं सिर्फ भर में ठोकर खाई गूगल का उपयोग कर रहा है। हो सकता है कि मेरी पोस्ट किसी और ने इस भर आता है में मदद मिलेगी।

28/01/2012 को 11:46
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more