Задний план:
Что работает
Что не работает
Мне интересно, есть ли что-то в файле fbs_ cookie, что предотвращает регенерацию входа в сеанс. Что-то связано с безопасным субдоменом или, возможно, с номерами портов, которые мы используем на наших сайтах dev?
Есть много людей, имеющих схожие проблемы с сеансами Facebook из того, что я видел, но предложения, которые я встречал, похоже, не затрагивают содержание файлов cookie, доменов, портов и т. Д. Мое понимание того, как вещи, относящиеся к куки-файлу, относительно легкие, но я бы хотел, по крайней мере, проверить их как не-проблемы, чтобы я мог искать в другом месте.
Цените любые идеи.
У меня была аналогичная проблема, и я начал использовать что-то похожее на следующее:
function get_facebook_cookie($app_id, $app_secret) { $args = array(); 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 null; } return $args; } $cookie = get_facebook_cookie(APP_ID, APP_SECRET); $me = json_decode(file_get_contents('https://graph.facebook.com/me?access_token='.$cookie['access_token'])); if ($me) { echo "Hi ".$me->name; } else { ?> <a href="https://www.facebook.com/dialog/oauth?client_id=<?= APP_ID;?>&redirect_uri=<?= REDIRECT_URI ;?>"><img src="http://img.ruphp.com/php/4li2k73z.gif"><!--Login with Facebook--></a>
Я также включаю следующие JS
<div id="fb-root"></div> <script src="http://connect.facebook.net/en_US/all.js"></script> <script> FB.init({appId: '<? echo APP_ID ?>', status: true, cookie: true, xfbml: true}); FB.Event.subscribe('auth.login', function(response) { window.location.reload(); }); </script>
Я использовал PHP SDK, например, самостоятельно, но я прекратил делать это до тех пор, пока он не работает. Я заметил, что это все еще вызывает несколько ошибок в журналах ошибок, связанных с куки-файлами, поэтому почти похоже, что он полагается на JS для инициализации файла cookie. Версия 3 SDK доступна сейчас, так что, возможно, это поможет. Единственное различие между этим я должен вручную вызвать file_get_contents на объект графа, который я хочу, но должно быть достаточно легко написать функцию или класс, чтобы сделать это для вас
Эта проблема ушла с новым PHP PHP SDK (v3)