2011-10-06 10 views
8

Mi historia de usuario actual es que el usuario1 ha iniciado sesión en mi sitio web y Facebook (estas cuentas están conectadas, etc.).

User1 cierra la sesión de mi sitio, pero no Facebook.

Después de este usuario2 inicia sesión en su cuenta, pero la sesión que le sobró al usuario1 se conecta con la interacción del usuario2 con mi sitio y con quién lo publica.

Así que, para solucionar este problema, compruebo si el usuario que ha iniciado sesión posee realmente el Facebook actualmente conectado (esto daría como resultado que vayan a cerrar sesión en Facebook, etc.) y muestra un enlace que debería permitir al usuario cerrar sesión ...

Al hacer clic en el enlace van a Facebook y regresan al sitio. Pero si abre una nueva pestaña y va a Facebook, el Usuario1 todavía está conectado.

¿Cómo puedo hacer que funcione este enlace ... qué está pasando? ¿Es esto un error con la API o qué? ...

Editar: He seguido probando con ID de usuario de valor cargando y con tokens de acceso válidos pero aún no he conseguido que el enlace de cierre de sesión funcione.

+0

> Después de este usuario2 inicia sesión en su cuenta, pero la sesión que sobró de user1 se conecta con la interacción del usuario2 con mi sitio y con quién lo publican. ¿El usuario2 inicia sesión en la misma computadora/navegador, o cómo se mezclan las "sesiones"? ¿Podría explicar eso un poco más allá, a qué se refiere exactamente con "sesión"? – CBroe

+0

Sí, el mismo navegador. Es un escenario poco probable porque la gente probablemente cerraría sesión en su cuenta de Facebook al salir de su computadora de todos modos, pero el problema aún debe resolverse. Básicamente, si Facebook está conectado como Persona 1, pero en mi sitio web, la Persona 2 inicia sesión mientras que la persona 1 todavía está conectada a Facebook, cualquier acción que realice en mi sitio web por Persona 2 extrae la información de Facebook para Persona 1. Puedo detectar si La cuenta de Facebook actualmente registrada y el usuario actualmente conectado en mi sitio web son la misma, pero si no, necesito una forma de iniciar sesión en Person 1 desde Facebook primero – Tom

+0

... para poder redirigir a la persona 2 a la autenticación de Facebook. screen – Tom

Respuesta

4

elimine la cookie y la sesión de Facebook manualmente. Aquí está mi solución de cómo resolví el problema hace algún tiempo, que creo que es un error de Facebook:

setcookie('fbs_'.$this->getAppId(), '', time()-100, '/', $_SERVER["SERVER_NAME"]); 
unset($_SESSION['fb_'.$this->getAppId().'_code']); 
unset($_SESSION['fb_'.$this->getAppId().'_access_token']); 
unset($_SESSION['fb_'.$this->getAppId().'_user_id']); 
unset($_SESSION['fb_'.$this->getAppId().'_state']); 

$ this-> getAppId es su Facebook ID de la aplicación, debe ser claro; o)

+0

, esto funcionará si el usuario que inició sesión en Facebook no está conectado a mi ¿solicitud? – Tom

+0

si el usuario no está conectado a su aplicación, ¿cómo puede el usuario iniciar sesión en su página? No sé si esto es posible ... pero: el usuario está definitivamente desconectado después de hacer esto. (tiene que hacer eso cuando Facebook redirecciona a su página ...) –

+0

si la persona 1 inicia sesión en Facebook y abandona la computadora, pero Facebook aún está conectado. Luego user2 inicia sesión en mi sitio web. Debido a que el otro usuario todavía está conectado, presenta un diálogo de permisos pidiéndoles que vinculen las cuentas, lo que significa que el nuevo usuario puede vincular su cuenta en mi sitio web con la cuenta de Facebook de otra persona. Quería evitar esto, y si la cuenta de Facebook no es la misma con la que el usuario se ha conectado anteriormente, no debería permitir que se vinculen, en su lugar cerrar la sesión de anuncios y requerir que inicien sesión en la cuenta de Facebook correcta. – Tom

0

Uno forma en que puede verificar esto usando el SDK de PHP y el SDK de JavaScript juntos.

Cuando el usuario visita su sitio, llaman FB.getLoginStatus() y comprobar que los partidos authResponse.userID lo que el PHP SDK retornos en $facebook->getUser(); (se puede hacer esto a través de una llamada AJAX si ayuda).

Usted sabe que si la identificación del usuario no coincide, entonces algo está mal aquí. Llamar a $ Facebook-> getLogoutUrl() debería desconectar al usuario de su sitio y Facebook, pero si no lo hace, intente usar session_destroy() en su código para borrar las sesiones. A continuación, redirija al usuario de nuevo a $ facebook-> getLoginUrl() y haga que vuelva a iniciar sesión. Esto corregirá la falta de coincidencia en la identificación del usuario y podrá repetir el proceso cuando regrese a su sitio.

He visto esto suceder en otras aplicaciones, lo que me lleva a pensar que se trata de un problema de Facebook. El JavaScript SDK no parece verificar si la cookie sigue siendo válida (si ya existe).

5

Un poco tarde pero aquí va mi aportación:

Uso los parametros cuando se genera la URL de cierre de sesión, se redirige a una página en la que se destruye la sesión utilizando la función API de Facebook para eso.

Aquí un ejemplo:

$logoutUrl = $facebook->getLogoutUrl(array("next" => "http://mydomain.com/page4logout")); 

En el page4logout que pueda instancia del objeto de facebook y ejecutar lo siguiente:

$facebook->destroySession(); 

Después de que se puede hacer un cambio de dirección.

+0

Hice lo que me sugirió, pero no en otra página. $ Facebook-> destroySession(); debe suceder en la misma página donde $ facebook = new Facebook (array (... es. Entonces redirecciono a la misma página con un parámetro? logout = 1 y luego lo controlo en la página después de $ facebook = new Facebook (array (y funciona. – themis

+0

@themis, por favor, ¿por qué no acepta esta respuesta? O, si alguna otra soluciona su problema, solo indíquelo aceptando. Solo estoy pensando que es correcto hacerlo. Gracias. –

Cuestiones relacionadas