Ανανέωση Facebook συνεδρία από μια εφαρμογή iframe

ψήφοι
13

Έχω μια εφαρμογή iframe Facebook που είναι εντελώς εξωτερικά. Με αυτό εννοώ ότι όταν ένας χρήστης αποκτά πρόσβαση στο URL καμβά για να φορτώσει την εφαρμογή, όλοι οι σύνδεσμοι στην εφαρμογή iframe πάει σε διακομιστές μου, και η σελίδα καμβά ποτέ δεν παίρνει ανανεώνεται, εκτός εάν ο χρήστης μεταβεί κάπου αλλού στο Facebook και έρχεται πίσω (ή κάνει μια ανανέωση του προγράμματος περιήγησης).

Στο αρχικό φορτίο της εφαρμογής όπου το Facebook δημιουργεί το iframe, έχω περάσει όλες τις συνήθεις παραμέτρους όπως fb_sig_user που μου επιτρέπει να δημιουργηθεί μια εσωτερική συνεδρία εφαρμογή με βάση το χρήστη facebook. Η σύνοδος αυτή η εφαρμογή (η οποία είναι όχι η συνεδρία του Facebook, αυτό είναι το δικό μου συνεδρία app) είναι το μόνο που χρειάζεται να επιτρέπουν στο χρήστη να εργαστεί με την εφαρμογή.

Το πρόβλημα έρχεται μια ώρα αργότερα. Εάν ο χρήστης αφήνει τον υπολογιστή, ή να χρησιμοποιεί την εφαρμογή για περισσότερο από μία ώρα, η συνεδρία του Facebook λήξει. Υπάρχουν κάποιες σελίδες εφαρμογών που απαιτούν γοητευτικός πληροφορίες φίλος, και αφού έχει λήξει η περίοδος FB, αυτές οι σελίδες να σπάσει, πετώντας έξω τα λάθη, όπως «Σφάλμα: το κλειδί συνόδου άκυρο ή δεν ισχύουν πλέον».

Η ερώτησή μου είναι αν υπάρχει ένας τρόπος για να ανανεώσετε συνεδρία του Facebook του χρήστη μέσα από μια εφαρμογή iframe για να το κρατήσει από λήγει μια ώρα αργότερα. Κάντε οποιοδήποτε από τα API κλήσεις το κάνετε αυτό; Είναι ένα τέχνασμα Facebook Σύνδεση με ping κάτι εκεί; Υπάρχει κάποια οριστική μέθοδος για να το κρατήσουμε ζωντανό εκεί; Δεν ήμουν σε θέση να βρούμε παραδείγματα που αφορούν συγκεκριμένα αυτό.

Δημοσιεύθηκε 07/05/2009 στις 18:38
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
21

Η νίκη είναι δική μου!

Υπάρχει μια σχεδόν εξ ολοκλήρου χωρίς χαρτιά λειτουργία του Facebook που ασχολούνται με συνεδρίες iframe, που βρήκα μια αόριστη αναφορά στην έρευνά μου. Αυτή η σελίδα δεν είναι πραγματικά το εξηγήσω καλά όμως, και μόνο μετά από αρκετές ώρες παρακολουθώντας διάφορα πλήκτρα συνεδρία στο iframe μου ήμουν σε θέση να καταλάβω τι συνέβαινε.

Προηγουμένως, iframe app μου έπαιρνε το συνηθισμένο γύρο των fb_whateverπαραμέτρων, όταν συνέβη το αρχικό φορτίο iframe. Έτσι, στην αίτησή μου, έκανα αυτό σε κάθε αίτημα:

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στο αρχικό φορτίο app, και θα ήθελα να σκίουρος μακριά σε ένα τοπικό $_SESSIONγια χρήση με το API. Αποθήκευσή του στην τοπική σύνοδο είναι απαραίτητη, γιατί fb_sig_session_keyποτέ δεν παίρνει πέρασε ξανά εκτός αν φορτώσετε εκ νέου το σύνολο της iframe εφαρμογή.

Έτσι, τα προβλήματα εμφανίστηκαν όταν αυτό το κλειδί συνόδου λήξει μια ώρα περίπου αργότερα.

Μετά την εξέταση των αόριστη σελίδα αναφοράς , άρχισα να εξετάζει όλες τις $_REQUESTμεταβλητές που έπαιρνα. Αποδεικνύεται ότι, ακόμη και σε μια εσωτερική σύνδεση μέσα στο iframe εφαρμογή σας, το Facebook τροποποιεί το αίτημα να περάσουν μαζί κάποιες παραμέτρους. Για κάποιο λόγο, έχουν μια εντελώς διαφορετική, αλλά και έγκυρο κλειδί συνόδου που έρχεται μαζί με κάθε αίτηση iframe!

Αυτή η παράμετρος είναι το όνομά του από το κλειδί API Facebook Application σας. Έτσι, αν το κλειδί API εφαρμογή σας είναι «XYZ123», κάθε αίτηση μέσα στο iframe σας παίρνει μια παράμετρο που ονομάζεται xyz123_session_key(καθώς και μερικά άλλα, όπως xyz123_expiresκαι η xyz123_user).

Μετά βλέποντας το σχετικό χρόνο λήξης για την κύρια συνεδρία (η αρχική fb_sig_session_key) και αυτό το iframe μόνο συνεδρία ( xyz123_session_key), το φως στην άκρη του τούνελ φάνηκε: το iframe μόνο κλειδί συνόδου χρόνο λήξης πραγματικότητα ενημερώνεται κατά καιρούς . Δεν έχω προσδιοριστεί πότε και πώς (υποθέτω ότι είναι ένα πινγκ Ajax σε κάποιο σημείο), αλλά παρ 'όλα αυτά, το ανανεώνει.

Περίμενα για την αρχική 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'];

Αυτό δίνει προτεραιότητα στο κλειδί «iframe μόνο».

Επεξεργασία: αρχική παραδοχή μου ότι το κλειδί «iframe μόνο» ενημερώθηκε μέσω κάποιου είδους μεθόδου Ajax ήταν λάθος, αποδεικνύεται αυτές οι τιμές καθορίζονται σε ένα μπισκότο από το Facebook. Αυτό οδηγεί σε ορισμένα προβλήματα μεταξύ τομέων, όταν χρησιμοποιεί αυτά τα cookies. Ρύθμιση μια πολιτική μπισκότο P3P θα ανακουφίσει αυτό με τα περισσότερα προγράμματα περιήγησης, εκτός από το Safari. Εξακολουθεί να μην υπάρχει καλή δουλειά εδώ και Safari.

Απαντήθηκε 08/05/2009 στις 00:32
πηγή χρήστη

ψήφοι
2

απλά βάλτε

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

στην κορυφή της σελίδας σας και δεν θα χάσετε συνεδρία σας στο iframe.

Έκανα επίσης ειδοποίηση ότι αυτό το νήμα είναι καλό 2 και μισό ετών. Απλώς σκοντάψει σε όλη χρησιμοποιεί το Google. Ίσως θέση μου θα βοηθήσει κάποιος άλλος που έρχεται σε αυτό.

Απαντήθηκε 28/01/2012 στις 11:46
πηγή χρήστη

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