Facebook SDK 4.0 - FacebookSession - 会话不会验证

时间:2014-06-03 21:17:02

标签: php facebook session sdk

我正在构建一个FB标签页。 在主页面上,我可以使用signed_request成功设置FacebookSession。 我开始会话并将$facebookSession->getToken()存储在$_SESSION['token']

$session = FacebookSession::newSessionFromSignedRequest($signedRequest);
$_SESSION['token'] = $session->getToken();

当我导航到IFrame中的另一个PHP页面时,我会根据存储的令牌创建另一个FacebookSession。

FacebookSession::setDefaultApplication($appId, $appSecret);
$session = new FacebookSession($_SESSION['token']);

会话已创建,但是当我尝试验证此会话时,SDK会抛出“会话已过期,或对此应用无效”-exception。

$session->validate()

任何想法都非常受欢迎。

2 个答案:

答案 0 :(得分:0)

你好我觉得我找到了答案。

FacebookSession类有1个必需的构造函数参数$ accessToken和一个可选的$ parsedSignedRequest。

我只是在会话中存储令牌而只使用这个令牌。 我目前还在会话中存储已解析的签名请求($session->getSignedRequestData()),并将其与令牌一起作为构造函数变量传递。 这将恢复会话。

存储在主页上:

$_SESSION['token'] = $this->fbSession->getToken();
$_SESSION['signed_data'] = $this->fbSession->getSignedRequestData();

在第二页重新初始化会话:

$token = $_SESSION["token"];
$parsedSignedData = $_SESSION["parsedSignedData"];
$session = new FacebookSession($token, $parsedSignedData);

我不知道这是否是正确的方法,但至少它是有效的。 :)

随意提出替代方案。

答案 1 :(得分:0)

正确的做法是使用$token来创建新会话

在第一页上应该是

$_SESSION['token'] = $this->fbSession->getToken();

在第二页上应该是

$token = $_SESSION["token"];
$session = new FacebookSession($token);

默认情况下SignedRequest应为NULL,这将有效。