Facebook PHP SDK getSession () не может получить сеанс. Проблема с Cookie?

Задний план:

  • Использование PHP PHP SDK v 2.1.2
  • cookieSupport = true
  • Приложение на Facebook имеет OAuth 2.0 для Canvas enabled
  • Логика Facebook Connect / sign происходит через https на отдельном субдомене (secure.mysite.com)
  • Сайты Dev – dev.mysite.com:PORT_NUM

Что работает

  • Я могу успешно с помощью Facebook Connect
  • После авторизации через диалоговое окно Facebook мы подписываем пользователя, а затем перенаправляем на fbconnect.php, который создает экземпляр класса Facebook и вызывает $ facebook-> getSession ()
  • Это возвращает действительную сессию Facebook, и мы переходим к нашей логике post-signIn
  • Затем мы перенаправляем на подписанную на домашней странице

Что не работает

  • В любое время после этого $ facebook-> getSession () возвращает NULL. Не важно что.
  • Согласно документам, Facebook должен восстановить действующий сеанс на основе cookie, если он действителен. Продолжительность устанавливается равным 1 часу, но вызовы, выполненные даже через 30 секунд после того, как cookie установлен, терпят неудачу.

Мне интересно, есть ли что-то в файле fbs_ cookie, что предотвращает регенерацию входа в сеанс. Что-то связано с безопасным субдоменом или, возможно, с номерами портов, которые мы используем на наших сайтах dev?

Есть много людей, имеющих схожие проблемы с сеансами Facebook из того, что я видел, но предложения, которые я встречал, похоже, не затрагивают содержание файлов cookie, доменов, портов и т. Д. Мое понимание того, как вещи, относящиеся к куки-файлу, относительно легкие, но я бы хотел, по крайней мере, проверить их как не-проблемы, чтобы я мог искать в другом месте.

Цените любые идеи.

Solutions Collecting From Web of "Facebook PHP SDK getSession () не может получить сеанс. Проблема с 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)