我有一个来自Facebook的令牌(来自图形浏览器工具)。我正在使用 PHP sdk。我使用上述令牌创建了一个会话,并调用了FacebookSession::validate()方法。它返回 TRUE。我将其上传到测试服务器中,当我运行它时,它显示会话已过期。我调试了令牌,到期应该持续 2 个月。
当我尝试获取用户信息(在测试服务器中)时,它也可以工作。甚至会话信息。它仅在我调用 validate() 方法时抛出"会话已过期"异常。知道我做错了什么吗?请注意,这仅在我将其上传到实时服务器后发生。我的本地服务器和实时上的代码是相同的。
下面是一个示例代码。appid 和 secret 已经通过调用 setDefaultApplication() 方法设置了。
<?php
'Facebook'FacebookSession::setDefaultApplication('app-id','app-secret');
$s = new 'Facebook'FacebookSession('my-access-token');
$u = null;
try {
$fbr = new 'Facebook'FacebookRequest($s, 'GET', '/1663246619?fields=id,first_name,last_name,gender,email,birthday,bio');
$u = $fbr->execute();
$i = $s->getSessionInfo();
var_dump($i->getProperty('is_valid'));
var_dump($s->validate());
} catch('Exception $e) {
var_dump($e->getMessage());
}
var_dump($u->getGraphObject()->asArray());
这是回应
bool(true)
string(50) "Session has expired, or is not valid for this app."
array(11) {
["id"]=>
string(10) "1663246619"
["email"]=>
string(22) "my-email@email.com"
["first_name"]=>
string(12) "Kapitanluffy"
["gender"]=>
string(6) "female"
["last_name"]=>
string(6) "Pirata"
["link"]=>
string(34) "http://www.facebook.com/1663246619"
["locale"]=>
string(5) "en_US"
["name"]=>
string(19) "Kapitanluffy Pirata"
["timezone"]=>
int(8)
["updated_time"]=>
string(24) "2014-12-06T23:47:48+0000"
["verified"]=>
bool(true)
}
其他注意事项:
- 访问令牌适用于我的应用
- 我正在使用facebook-php-sdk-v4版本4.0.3
您需要将 SDK 版本升级到最新的稳定版本 4.0.12
。自4.0.3
年以来,已经有很多错误修复和安全更新。其中一个错误与您遇到的会话信息验证有关。这应该有望解决您的问题。:)