【发布时间】:2014-11-02 02:02:21
【问题描述】:
在下方查看完整的原始问题
使用最新的 Facebook PHP SDK 4.4.0,在我的主应用程序页面中,我可以执行以下操作来获取用户 ID 等。
<?php
FacebookSession::setDefaultApplication(APP_ID, SECRET);
$helper = new FacebookRedirectLoginHelper( PAGE_URL );
$pageHelper = new FacebookPageTabHelper();
$session = $pageHelper->getSession();
echo '<p>You are currently viewing page: '. $pageHelper->getPageId() . '</p>';
// get user_id
echo '<p>User Id: ' . $pageHelper->getUserId() . '</p>';
// **depcrecated** get like status - use for likegates
echo '<p>You have '. ( $pageHelper->isLiked() ? 'LIKED' : 'NOT liked' ) . ' this page</p>';
// get admin status
echo '<p>You are '. ( $pageHelper->isAdmin() ? 'an ADMIN' : 'NOT an ADMIN' ) . '</p>';
?>
这在我的应用程序的子页面上不起作用...为什么会话(以及其他事项,签名请求)丢失?我怎样才能让他们回来,我怎样才能从 FacebookPageTabHelper 获取诸如 getUserId() 之类的方法以继续在子页面上工作?
完整的原始问题
我是 Facebook 应用程序开发的新手,我在会话管理方面遇到了问题,我似乎无法理解它。当然官方文档几乎没用也无济于事。
我的问题是,当从应用程序主页移动到 Facebook 页面选项卡应用程序 iframe 中的子页面时,页面会话会丢失。
我使用以下 PHP 代码在主(初始)应用程序页面上获取会话和用户 ID,效果很好:
<?php
FacebookSession::setDefaultApplication(APP_ID, SECRET);
$helper = new FacebookRedirectLoginHelper( PAGE_URL );
$pageHelper = new FacebookPageTabHelper();
$session = $pageHelper->getSession();
?>
但它在子页面上不起作用:(当用户单击菜单项(或应用程序/iframe 中的任何其他链接)时,会话再见。这并不理想,因为我需要用户 ID来跟踪该用户是否完成了某些操作。当然,我可以将 ID 与每个请求一起发送,但必须有一种方法来保持会话,不是吗?
有没有办法在 PHP 的子页面上检索会话?如果是这样,怎么做?还是我必须使用 javascript 加载其他内容?如果我不能在请求之间保持会话,因此无法识别请求来自哪个用户,那将如何工作?其他人如何处理?
我想避免编写自己的用户会话管理,这可以解决问题,但根本不在预算之内,我希望我可以使用 Facebook 已经提供的功能。特别是因为我的应用程序不需要任何类型的用户信息/权限。
非常感谢您提供有关此主题的任何信息,非常感谢,在这里转圈。
编辑澄清:我想将 Facebook 会话保存在 PHP 会话 cookie 中,但是在更改页面后如何使用它重新连接与 Facebook?
【问题讨论】:
-
我建议将
FacebookSession实例放入 PHP 会话中。 -
@CBroe 感谢您的建议。我想到了这一点,但我不仅需要会话(也许我必须在我的问题中澄清这一点),我还需要与 Facebook 保持连接。有没有办法使用保存的会话重新建立与 Facebook 的连接?
-
“保持连接”是什么意思?如果您有一个有效的(用户)会话,那么您可以使用它来发出 API 请求,这就是它的用途。
-
@CBroe 很抱歉不清楚!请参阅上面的第二个编辑。通过“保持连接”,我的意思是我希望 facebook 会话在应用程序的子页面中持续存在。同样,我是 FB 应用程序开发的新手,也许我并不完全理解它背后的概念 :)
-
只需尝试将 FacebookSession 放入您的 PHP 会话中,然后在以下页面中从那里检索它……
标签: facebook facebook-graph-api facebook-php-sdk