Facebook给了我两个不同的访问令牌,PHP SDK

Facebook给了我两个不同的访问令牌,PHP SDK,php,facebook,facebook-php-sdk,facebook-apps,facebook-access-token,Php,Facebook,Facebook Php Sdk,Facebook Apps,Facebook Access Token,我正在使用Yii作为框架,但我认为这并不合适 此时,我使用PHPSDK从用户那里获取帐户信息,这在我的用户刚登录时可以正常工作。但在1或2小时后,访问令牌过期,我得到一个错误(这并不奇怪) 但这里是我陷入困境的地方,我可以想出两种解决方案,但我都不知道如何去做。首先让我介绍一下我的一些代码: 要登录到我的应用程序,用户将被发送到FacebookLogin()操作: public function actionFacebookLogin() { $my_url = 'http://***.

我正在使用Yii作为框架,但我认为这并不合适

此时,我使用PHPSDK从用户那里获取帐户信息,这在我的用户刚登录时可以正常工作。但在1或2小时后,访问令牌过期,我得到一个错误(这并不奇怪)

但这里是我陷入困境的地方,我可以想出两种解决方案,但我都不知道如何去做。首先让我介绍一下我的一些代码:

要登录到我的应用程序,用户将被发送到
FacebookLogin()
操作:

public function actionFacebookLogin()
{
    $my_url = 'http://***.***.nl/app/facebook-popup.php';
    $permissions = 'read_insights, publish_actions, manage_pages, email';
    $loginUrl = Yii::app()->facebook->getLoginUrl(array('scope' => $permissions, 'display' => 'popup', 'redirect_uri' => $my_url));
    echo '<script> window.location="'.$loginUrl.'"</script>';
}
public function actionLogin() {
    $facebookID = Yii::app()->facebook->getUser();  
    $accessToken = Yii::app()->facebook->getAccessToken();
}
(登录操作的其余部分并不重要。)

现在,
->getAccessToken()
函数为我提供了一个使用寿命短的正确访问令牌。这很好,除非用户在我的页面上的时间超过1或2个小时,“现在有些奇怪的东西*在那之后,用户必须注销并重新登录。然后我仍然会收到错误,除非大约10分钟后,我获得了一个新的访问令牌,它确实授予我所需的权限

所以为了解决这个问题,我想到了两个解决方案,我找不到合适的方法来使用它

首先是最简单的。 当我转到并使用access_令牌时,我的应用程序会给我提供信息,但当我尝试调试access_令牌时,它会显示access_令牌有一个过期日期。但当我使用相同的令牌并让它自己生成access_令牌时,我会得到一个根本不会过期的access_令牌

如有人问我的最新处理方法 我转到API资源管理器并将应用程序更改为我的Web应用程序。然后它自动填充了一个正常的访问令牌。当我按下“调试”按钮时,它表示此访问令牌有一个试用日期。当我返回资源管理器并按下“获取访问令牌”按钮时,它会给我另一个令牌。当我再次按下“调试”按钮时“按钮它表示此访问令牌没有支出日期。如果我能用这个就太好了

因此,我的第一个解决方案是获取最后一个access_令牌(如果可能的话),并将其存储在我的数据库中。然后在需要时使用Facebook PHP SDK
->setAccessToken()
函数。但是怎么做??我一点也不知道

我想到的第二个解决办法。 我还可以创建一个
init()
函数,该函数检查每个操作是否获得有效的访问令牌,如果没有,则检查是否获得新的访问令牌,或者刷新当前过期的访问令牌。这将比第一个解决方案有更多的服务器负载,与第一个解决方案相同,我不知道如何实现这一点

我认为主要的问题是我发现Facebook文档有点难以理解,而且我不知道从哪里开始


任何输入都将非常感谢

您可以延长访问令牌的过期时间,如下所述:


或者,您可以嵌入JSSDK,如果前一个访问令牌已过期,它将在每次页面调用中获得一个新的短期访问令牌。(并通过cookie与PHP SDK共享。)

这一段“第一个最简单的…”令人困惑。这里显然有两种不同的工作方式。你需要明确你在图形浏览器中为每个人做了什么。编辑了我的帖子,谢谢你的反馈。希望这足够清楚。如果我嵌入JSSDK,它会自动更新访问令牌吗?或者我需要以某种方式调用它吗?