使用PHP访问Facebook会话


Access Facebook Session using PHP

我正在努力在我的网站上使用PHP来保持Facebook会话的活力。

我使用JavaScript SDK和PHP SDK来构成我的应用程序的基础。

我遇到的问题是,当"Facebook会话"结束时,我的PHP脚本会认为你已经注销了Facebook。但是,当我使用JavaScriptSDK调用FB.init()时,会话就复活了。

有没有使用PHP SDK实现同样的功能?或者我可以在Facebook会话上设置一个自定义的到期时间吗?

摘自评论

会话过期时间似乎设置为2小时,但我对此不确定。我不认为调用PHP api会有什么不同。我需要更清楚地解释一下发生了什么。基本上,如果你到达我的主页,你可以选择通过Facebook登录。如果你这样做,这一切都很好!一旦你登录并授权了应用程序,这就可以了,直到会话到期。当会话到期时,PHP SDK似乎无法确定您是否通过Facebook登录,但Javascript SDK是。我使用getUser()作为PHP SDK

换句话说,因为会话已经过期,PHP认为您不再通过Facebook登录。Javascript SDK能够检测您是否登录,无论会话是否存在。当它意识到你是,它会以任何方式重新创建会话。但是,为了让PHP获取会话,显然需要刷新页面。这就是我遇到的问题,因为页面显示的内容基于你的Facebook登录,我需要PHP SDK来重新创建会话,这样就没有必要刷新页面。

好的。。。不知道你的会话为什么会这样做的确切细节是什么——我也必须声明,我对PHP会话不是很熟悉,也没有丰富的经验

我的建议是让JavaScript SDK来完成它的工作。。。让它成功地"重新检测"你的会话,然后对你的服务器进行AJAX调用。在处理该调用的过程中,您可以创建并重新启动PHP SDK,从而恢复会话

此外,您可以定期调用FB.getAuthResponse,以确保用户会话仍然有效(至少在JavaScriptSDK中)。

从Fb.getLoginStats()文档:

{
    status: 'connected',
    authResponse: {
        accessToken: '...',
        expiresIn:'...',
        signedRequest:'...',
        userID:'...'
} }

通过在响应对象,您可以确保您的应用程序和您都知道该用户可以开始对Facebook API进行进一步调用如果authResponse对象不存在,用户可能未登录Facebook,或尚未授权您的应用程序