强制Facebook会话刷新

时间:2012-03-18 17:00:36

标签: javascript facebook facebook-javascript-sdk facebook-php-sdk

是否可以强制Facebook会话刷新,或者在文档中多次调用'FB.init'函数。我不会详细谈论我想要实现的目标,因为它已经很长时间了,但是我已经研究了一段时间了,这似乎是必要的。

我有一个每隔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,但出于特殊原因我也不想这样做
  3. 任何帮助非常感谢

2 个答案:

答案 0 :(得分:0)

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

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

无论如何,如果他们有任何意见,我会保留其他人发表意见。似乎尝试在PHP和Javascript SDK之间进行通信在某些情况下是一个真正的挑战,我遇到的问题数量......

答案 1 :(得分:0)

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

相关问题