2011-06-07 68 views
3

背景:Facebook PHP SDK getSession()无法获得会话。 Cookie问题?

  • 使用Facebook PHP SDK v 2.1.2
  • cookieSupport =真
  • 应用在Facebook上具有的OAuth 2.0画布启用在逻辑
  • Facebook连接/符号发生通过HTTPS上的单独的子域(secure.mysite.com)
  • 开发位点是dev.mysite.com:PORT_NUM

W¯¯帽子工作

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

什么不起作用

  • 任何时间后,$ facebook-> getSession()返回NULL。无论。
  • 根据该文档,Facebook的应该再生基于cookie的,只要它是有效的有效会话。持续时间被设置为默认值1小时,但在cookie设置失败后甚至会在30秒内完成调用。

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

有很多具有从我所看到的与Facebook会话类似问题的人,但我遇到的建议似乎没有解决fbs_饼干,域,港口等内容我了解这些事情与cookies的关系是相对较轻的,但我想至少将它们作为非问题进行检查,以便我可以在其他地方查看。

欣赏任何见解。

+0

我有类似的isses,但只在某些浏览器,并不想重做我的整个登录过程。到目前为止,这个http://stackoverflow.com/questions/3955615/how-do-i-get-my-facebook-application-to-automatically-ask-for-required-permission看起来最有希望 – danjp 2011-06-29 01:15:16

回答

0

这个问题带走了新的Facebook PHP SDK( v3)

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,但我停止了做它的表面无法正常工作。我注意到,这仍然引发了与cookies相关的错误日志中的一些错误,所以它几乎看起来像依赖于JS首先初始化cookie。 SDK的第3版现在可用,所以这可能会有所帮助。唯一的区别是我必须手动调用我想要的图形对象上的file_get_contents,但它应该很容易编写一个函数或类来为你做这件事

+0

谢谢汤米。我会试试这个。 – byron 2011-06-30 05:58:44