我正在使用laravel构建一个Facebook应用程序,我在我的代码中使用Redirect::to('thank_you')
,在用户提交表单后将用户重定向到感谢页面。
function submitForm() {
//Process input
//Done, now redirect to thank you page
Redirect::to('thank_you')
}
然而,在'thank_you'中,Facebook访问令牌消失了。因此,当我需要运行$facebook->api('/me')
时,它会抛出一个异常,说明需要一个有效的访问令牌。
这让我发疯了!你有什么建议吗?
(我目前正在$ _SESSION ['user_token']中存储访问令牌。但是当用户注销时,这仍然有效,因此用户无法在应用程序中注销他的FB帐户。不希望网站上有任何退出按钮
//Fix for invalid access tokens
if(!isset($_REQUEST['code']) && isset($_SESSION['accessToken'])) {
$this->facebook->setAccessToken($_SESSION['accessToken']);
}
//if the user has just done facebook login & auth
else if(isset($_REQUEST['code'])) {
$_SESSION['accessToken'] = $this->facebook->getAccessToken();
}
答案 0 :(得分:0)
如果应用程序位于iframe内(例如Facebook Canvas App或Page Tab App),则需要设置一个P3P标题,告知浏览器允许您从iframe中访问Cookie。
header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');
如果您不这样做,会话cookie不会传递到您的应用程序,这将导致您被注销。
(仅当您在iframe内时才有意义)
编辑:这是关于p3p标题Cookie blocked/not saved in IFRAME in Internet Explorer
的详细解释