【问题标题】:Access Facebook Session using PHP使用 PHP 访问 Facebook 会话
【发布时间】:2012-01-15 21:13:57
【问题描述】:

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

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

我遇到的问题是,当“Facebook 会话”结束时,我的 PHP 脚本认为您已退出 Facebook。但是,只要我使用 JavaScript SDK 调用 FB.init(),会话就会恢复正常。

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

从 cmets 中提取

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

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

【问题讨论】:

  • 会话过期需要多长时间,如果您使用 PHP 调用 api,这与从 JavaScript 调用 FB.init() 的效果相同吗?

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


【解决方案1】:

好的...不确定您的会话为什么会这样的确切细节 - 我也必须声明,我对 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,或尚未授权您的应用。

【讨论】:

  • 我想我找到了问题所在! PHP 确实重新创建了会话,它与此无关。问题很复杂,但实际上这只是我的 PHP 中错误排序进程的一种情况。真的很抱歉浪费您的时间,无论如何感谢您的帮助。但我只想说,我喜欢你关于使用 AJAX 的建议。我可以实现一个应急方案,如果 Javascript SDK 检测到用户已登录而 PHP 没有登录,那么我可以通过 AJAX 更改页面内容!谢谢哥们!
  • 不客气!没有人在这里浪费时间。 “你把最需要学的东西教得最好。” - 理查德巴赫
  • 请点击我的回答左上角的勾,将此问题标记为已回答。
  • @Lix OP 似乎已经声明您的解决方案没有导致问题,因此您的答案不应该被接受(即使它确实提供了有用的信息。)如果我是,请纠正我错了。
  • 只需要一种意见就改变了我的想法:P 所以..不......你没有错 :) 不过仍然很乐意提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
相关资源
最近更新 更多