我正在努力在我的网站上使用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,或尚未授权您的应用程序