我正努力在我的网站上使用PHP保持Facebook会话活跃。
我使用JavaScript SDK和PHP SDK构成我的应用程序的基础。
我遇到的问题是,当“Facebook会话”结束时,我的PHP脚本认为您已退出Facebook。但是,只要我使用JavaScript SDK调用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才能重新创建会话,因此无需刷新页面。
答案 0 :(得分:0)
好的......不确定你的会话为什么会这样做的确切细节 - 我必须说明我对PHP会话不是很精通并且没有丰富的经验。
我的建议是让JavaScript SDK完成它的工作......让它成功地“重新检测”你的会话,在它完成之后,对你的服务器进行一次AJAX调用。在处理该调用时,您可以创建并重新启动PHP SDK,从而恢复会话。
此外,您可以定期调用FB.getAuthResponse以确保用户会话仍然有效(至少在JavaScript SDK中)。
来自Fb.getLoginStatus() documentation:
{
status: 'connected',
authResponse: {
accessToken: '...',
expiresIn:'...',
signedRequest:'...',
userID:'...'
} }
通过测试中是否存在authResponse对象 响应对象,您可以确定您的应用和您已知用户 可以开始进一步调用Facebook API。 如果 authResponse对象不存在,用户未登录 Facebook,或者尚未授权您的应用。