我正在构建一个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()
任何想法都非常受欢迎。
答案 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
,这将有效。