2009-02-16 14 views
5

Sto creando un'applicazione di connessione Facebook che viene eseguita all'interno di un gadget Google. Essere un gadget significa che l'applicazione viene eseguita all'interno di un iframe. All'interno dell'applicazione, c'è un modulo che consente agli utenti registrati di postare commenti. L'invio è fatto usando AJAX, ma ottengo gli stessi risultati con una forma normale. Il problema è che ho bisogno di ottenere l'ID di Facebook dell'utente. In Firefox, funziona benissimo, ma su Internet Explorer 7, ottengo il seguente errore:Applicazione Facebook Connect all'interno di iframe non funzionante in IE7

'A session key is required for calling this method' 

Credo che questo sia dovuto al modo in cui Internet Explorer gestisce i cookie di terze parti, perché se vado a Opzioni Internet/Privacy/Avanzate, e controllo Sostituisci la gestione automatica dei cookie e accetta tutti i cookie, funziona perfettamente. Non posso passare l'id di Facebook dal javascript, perché chiunque potrebbe manometterlo.

MODIFICA: se apro direttamente il contenuto dell'iframe, l'app funziona correttamente. Il problema è in realtà dovuto al modello di sicurezza IFRAME e IE.

Cosa sto facendo qualcosa di sbagliato? Come posso aggirare questo problema?

+0

sto colpendo un problema simile con un'applicazione Facebook Connect che viene eseguito all'interno di un iframe sovrapposto su un sito di terze parti , eccetto che ho problemi con Safari e Firefox, se gli utenti hanno scelto di non accettare cookie di terze parti. Hai visto gli stessi problemi lì o mi sto perdendo qualcosa? –

+0

Non ho provato a bloccare i cookie di terze parti su altri browser, ma ciò dovrebbe causare gli stessi problemi. Sono andato per la soluzione di aprire un popup. In effetti, Facebook ora usa un popup "finto" all'interno del mio popup, invece di aprire un'altra finestra, che per me è ok. –

risposta

7

Hai provato ad aggiungere un criterio P3P?

Se l'imposta il cookie di risposta ha una politica compatta, IE utilizzerà questo per determinare se consentire o meno il cookie 3rd party ..

+0

Ciao, non lo sapevo. Indagherò Molte grazie! –

1

Ho trovato un work-around che funziona, anche se è un po 'brutto: quando l'utente fa clic sul pulsante "login", apre un popup che proviene dal mio sito e che contiene il pulsante di accesso a Facebook Connect. Dopo che l'utente ha effettuato l'accesso, chiudo il popup e ricarica l'iframe.

Questo è davvero brutto perché apre due popup, ma almeno funziona. Rileverò se i cookie sono abilitati usando javascript e se sono abilitati, salterò il primo popup.

Sono ancora aperto a soluzioni migliori ...


Edit: Facebook utilizza ora un pop-up "falso" dentro la mia comparsa, invece di aprire un'altra finestra. Ora ho solo un popup che va bene per me.

3

ho risolto lo stesso problema modificando come posso controllare se l'utente è stato loggato sulla pagina PHP seguendo un login FB connect.

Quindi, accedono a FB Connect con IE7. I successivi e successivi caricamenti di pagina in cui ho bisogno di verificare che siano effettivamente registrati in FaceBook ho usato il seguente codice (nota che $ facebook-> require_login() e altre funzioni non hanno funzionato - hanno restituito null solo in IE 7):

// Validate from Facebook that session is valid and user is logged in. require_once 'facebook/facebook.php'; $facebook = new Facebook(YourAppsAPIKeyPublic, YourAppsAPIKeySecret); $facebook->api_client->session_key = $this->userAPISessionKey; $fb_user_id = $facebook->api_client->users_getLoggedInUser();

$ fb_user_id ora dovrebbe avere un ID utente FaceBook valido.

Per quanto riguarda la politica sulla privacy e Facebook Connect + IE 7:

Anche se questo non ha funzionato per me sembra funzionare per gli altri.in HTAccess:

Header append P3P "CP=\"HONK\""

o in file PHP:

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

di riferimento: http://forum.developers.facebook.com/viewtopic.php?id=28636

ASP.NET:

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    HttpContext.Current.Response.AddHeader("p3p", "CP=\"CAO PSA OUR\""); 
} 
+0

nel tuo codice, usi "$ this-> userAPISessionKey", quindi quale oggetto viene referenziato da "this" ?? grazie: D –