Facebook PHP SDK getSession() 无法获取会话。饼干问题?

问题描述 投票:0回答:3

背景:

  • 使用 Facebook PHP SDK v 2.1.2
  • cookieSupport = true
  • Facebook 上的应用程序已启用适用于 Canvas 的 OAuth 2.0
  • Facebook Connect / 登录逻辑通过 https 发生在单独的子域 (secure.mysite.com) 上
  • 开发网站是 dev.mysite.com:PORT_NUM

什么有效

  • 我可以使用 Facebook Connect 成功登录
  • 通过 Facebook 对话框授权后,我们登录用户,然后重定向到 fbconnect.php,它实例化 Facebook 类并调用 $facebook->getSession()
  • 这将返回一个有效的 Facebook 会话,我们继续执行登录后逻辑
  • 然后我们重定向到登录的主页

什么不起作用

  • 此后的任何时间,$facebook->getSession() 都会返回 NULL。 不管怎样。
  • 根据文档,只要 cookie 有效,Facebook 就应该根据 cookie 重新生成有效会话。 持续时间设置为默认 1 小时,但在设置 cookie 后即使 30 秒完成的调用也会失败。

我想知道 fbs_ cookie 中是否有某些内容阻止了登录后会话的重新生成。 与安全子域或可能与我们在开发站点上使用的端口号相关的东西?

据我所知,有很多人对 Facebook 会话有类似的问题,但我遇到的建议似乎没有解决 fbs_ cookie、域、端口等的内容。我对如何解决的理解与 cookie 相关的此类事情相对较轻,但我想至少将它们视为非问题,以便我可以在其他地方寻找。

感谢任何见解。

php facebook session cookies sdk
3个回答
2
投票

我遇到了与你类似的问题,我开始使用类似于以下内容的东西:

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://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/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,比如你,但我停止使用它,因为它不起作用。我注意到这仍然会在与 cookie 相关的错误日志中引发一些错误,因此看起来它几乎依赖于 JS 首先初始化 cookie。 SDK 版本 3 现已推出,也许这会有所帮助。两者之间的唯一区别是我必须在我想要的图形对象上手动调用 file_get_contents 但编写一个函数或类来为您执行此操作应该很容易


0
投票

新的 Facebook PHP SDK (v3) 解决了这个问题


0
投票

我的帐户我的 Facebook 帐户请请求我的 Facebook 管是我的帐户请恢复请帮助我一些事情我的请帮助我访问我的 Facebook 请先生我的 Facebook 名称 Gamaer Raj 请我的 Facebook [电子邮件受保护] 我的 Facebook 先生请基特纳Kitna bhi mil 号码 hai pura 号码 电子邮件 kar dijiye 私人删除 kar dijiye 请我的 Facebook 团队我的请求

© www.soinside.com 2019 - 2024. All rights reserved.