Facebook vuelve a iniciar sesión automáticamente desde la cookie php

Mi sitio web usa Facebook Connect para iniciar sesión y la duración de la sesión en mi servidor es 3600.

Estoy utilizando Client-Side Flow (javascript) redirigir a login.php, y login.php recuperar cookies (establecido por javascript) para obtener token de acceso.

Sin embargo, si un usuario está inactivo durante 3600 segundos, la sesión en mi servidor caducará. ($ _SESSION [‘uid’] no existe.) ¿Cómo puede mi login.php comprobar que el usuario ya ha iniciado sesión en Facebook (no en mi aplicación) o no?

La solución que estoy usando es redirigir al usuario a mi página de JavaScript, y “función de estado” se activará automáticamente por Facebook.

Estoy buscando una solución que se pueda hacer con login.php para volver a iniciar sesión automáticamente en mi sitio web si ha iniciado sesión en Facebook (sin redirigir a la página de JavaScript). Es posible?

javascript:

FB.init({appId: 'MY_APP_ID', status: true, cookie: true, xfbml: true}); FB.getLoginStatus(function(response) { onStatus(response); FB.Event.subscribe('auth.statusChange', onStatus); FB.Event.subscribe('auth.login', reloadPage); }); function onStatus(response) { if (response.session) { window.location.href = '/login?fb'; } } function reloadPage(response) { if (response.session) { window.location.href = '/login?fb'; } } 

PHP (para iniciar sesión):

 function get_facebook_cookie($app_id, $app_secret) { $args = array(); if(!isset($_COOKIE['fbs_' . $app_id])) return false; parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); ksort($args); $payload = ''; foreach ($args as $key => $value) { if ($key != 'sig') { $payload .= $key . '=' . $value; } } if (md5($payload . $app_secret) != $args['sig']) { return false; } return $args; } $cookie = get_facebook_cookie(MY_APP_ID, MY_APP_SECRET); if($cookie){ if($result = @file_get_contents("https://graph.facebook.com/me/?access_token=".$cookie['access_token'])){ $result = json_decode($result, true); $_SESSION['uid'] = $result['id']; } 

He descubierto una forma de hacerlo. Para iframear la siguiente página en todas las páginas.

Cuando el token de acceso otorgado por Facebook a través de la cookie caduca, ingrese en iframe auto refresh. Y FB.init () configuraría un nuevo token de acceso (cookie) para mi aplicación.

En mis archivos php, solo revisa las cookies como las primeras conectadas.

fb_keepalive.html:

 

Todavía soy un nuevo miembro de FB connect y todo ese proceso, pero quería poner mis 2 centavos. He visto algunos sitios estrictamente integrados en usuarios que tienen FB, por lo que están conectados o no a FB se aplica a los sitios particulares que menciono. Me he dado cuenta si he iniciado sesión en FB y me he conectado con esos sitios en el pasado, entonces automáticamente vuelvo a iniciar sesión en dicho sitio. Se aplica la misma lógica si no estoy conectado.

Dicho esto, supongo que esto significa que FB tiene una cookie reconocible que se puede detectar en algún lugar, donde si se detecta, es probable que pueda usarla en su script para hacer que los usuarios inicien sesión automáticamente después de esa marca de 3600. Sé por twitter y linkedin que tienen tokens de autenticación de usuario que identifican a cada usuario que finalmente puede ser almacenado en un DB y reutilizado más tarde. Así que creo que tal vez va a querer investigar un poco más con FB ya que estoy seguro de que tiene que ser el caso con FB también. Donde almacena este token que está asociado con un usuario donde puede encontrar que si se encontró la cookie previamente mencionada, entonces busque ese token de autenticación. Lo siento si esto no tiene mucho sentido. Me estoy quedando sin humo aquí. Si fuera mejor con las cosas de FB trataría de ofrecer más ayuda, pero estoy en las etapas más básicas para entender cómo puedo interactuar con FB y un sitio que no sea de FB.

Mientras se mantiene el flujo del lado del cliente, puede usar Facebook PHP SDK ( ver en github ) para tratar con la sesión del usuario.

 $facebook = new Facebook(...); // Get the User ID $user = $facebook->getUser(); 

$user not null significa que el usuario ha iniciado sesión en Facebook y se ha autenticado. Ya no necesitas el PHP que diste aquí ( get_facebook_cookie y get_facebook_cookie ): está todo incluido en el Facebook PHP SDK. Debería ser suficiente para ti.


Yendo más allá: si quieres hacer llamadas a la API para ese usuario.

$user not null no significa que tiene un token de acceso válido para este usuario. Una forma de comprobar si tiene un token de acceso válido es intentar realizar una llamada a la API:

 $isvalid; try { $facebook->api('/me'); $isvalid = true; } catch (FacebookApiException $e) { $isvalid = false; }