1

是否可以强制刷新Facebook会话,或者可以在文档中多次调用“FB.init”函数。因为它很长时间以来我不会过多详细说明,但我一直在研究这个问题一段时间,而且它看起来有必要做到这一点。强制刷新Facebook会话

我有一个是每30秒来检查,如果Facebook的用户登录调用的脚本,这是简单地由此实现:

window.fbAsyncInit=function(){ 
    // Initialize the Facebook object 
    FB.init({ 
     appId:"123", 
     status:true, 
     cookie:true, 
     xfbml:true, 
     oauth:true 
    }); 
    // Check the Facebook session status every 30 seconds 
    setTimeout(function(){ 
     // Pass the Facebook object to the welcome function 
     fb_welcome(FB); 
    ,30000); 
}; 

在“fbWelcome”功能,我测试一下,看看是否用户使用getLoginStatus函数通过Facebook登录。依赖于响应,我然后更改页面上的元素。但是,我所做的一件事情就是让所有这些都出错。

如果用户登录到Facebook,那么我使用ajax发送一个请求到我的API,返回Facebook用户的详细信息。该API使用PHP与Facebook API进行通信。如果用户在加载页面时登录到Facebook,则不会有任何问题。但是,如果用户未登录到Facebook,并在我的站点上的另一个选项卡上登录Facebook,则会话不会刷新,并且由于访问令牌和签名请求无效,因此无法访问详细信息。因此,我需要一种方法来使用javascript刷新访问令牌和会话中的签名请求,以确保PHP API可以正确读取它们。

我很确定,通过再次调用FB.init函数,这将解决它,因为它会刷新会话。但是,我不确定我是否打算每页多次调用一次该函数。这是否允许?它会搅乱一切吗?

就在几个注意事项:

  1. 我知道我可以检索通过JavaScript的SDK和FB.api的用户的详细信息,但是,我不想对具体的原因做
  2. 我也知道,我可以通过访问令牌和签名的请求到PHP API,但我也不想对特殊原因

任何帮助非常赞赏这样做

回答

0

尽管我还没有回答我的问题,但我已经使用我不想使用的解决方案之一解决了问题。我现在使用Javascript API而不是我自己的API检索用户详细信息,因为我无法将新的Facebook会话传递给PHP API。

我试图再次调用init函数,虽然我能够,但它完全没有效果,再加上我不是真的想成为解决方案,因为我不应该重新初始化Facebook库,只是为了刷新会话。

无论如何,我会留下这个开放的,以允许其他人给出他们的意见,如果他们有任何。似乎试图在PHP和Javascript SDK之间进行通信在某些情况下是真正的挑战,我遇到过的问题的数量...

+0

我很想知道你是如何做到这一点的;我试图用JS API做同样的事情。 – 2012-04-23 10:12:16

+0

@JamieDexter最后我不得不使用FB.api!我尝试了很多不同的东西,无济于事......我写的每一件破解都不够可靠,最终不值得进一步发展。我不得不整合Facebook API,这显然还没有准备好与其整合,这令人非常恼火。除非与Facebook进行整合是您业务的必要条件,否则请远离它。你永远不能保证它会起作用,即使你的代码是好的! – 2012-04-24 13:53:17

0

也许我不明白你在做什么。但是,如果你想验证服务器端的Facebook会话,只需抓住facebook cookie并做auth服务器端来获取access_token。将该access_token存储在会话中,然后在每次用户访问您的api时进行验证。只要用户登录到Facebook,facebook cookie应该可用,并且您只需验证access_token是否有效。如果没有,请检索新的令牌。如果Cookie和标记都无效,则将您的用户重定向到init。

+0

感谢您的回复,但这不是问题。访问会话服务器端很容易,尽管我在过去遇到过一些问题......问题在于通过AJAX将会话从Javascript传递到PHP。虽然这很好,但一旦会话改变就会失败,这就是我被卡住的地方。无论我做了什么,我都无法让我的API在不重新加载页面的情况下接收新会话。不管怎么说,还是要谢谢你 :-) – 2012-03-18 23:01:34