强制刷新Facebook会话

Force the Facebook Session to refresh

本文关键字:会话 Facebook 刷新      更新时间:2023-09-26

是否可以强制刷新Facebook会话,或者在文档中多次调用"FB.init"函数。我不会过多地详述我试图实现的目标,因为它很冗长,但我已经为此工作了一段时间,似乎确实有必要这样做。

我有一个脚本,每30秒调用一次,检查脸书用户是否登录,这可以简单地实现:

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,但由于特殊原因,我也不想这样做

任何帮助都非常感谢

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

我试着再次调用init函数,尽管我能够调用,但它绝对没有效果,而且我真的不希望它成为解决方案,因为我不应该为了刷新会话而重新初始化Facebook库。

无论如何,如果其他人有意见的话,我会让他们发表自己的意见。在某些情况下,尝试在PHP和Javascript SDK之间进行通信似乎是一个真正的挑战,我在它方面遇到了很多问题…

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