0

我正在使用 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();
}
4

1 回答 1

0

如果应用程序位于 iframe 中(例如 Facebook Canvas 应用程序或 Page Tab 应用程序),那么您需要设置一个 P3P 标头,告诉浏览器允许您从 iframe 访问 cookie。

header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');

如果您不这样做,会话 cookie 不会传递到您的应用程序,这将导致您被注销。

(仅当您在 iframe 中时才有意义)

编辑:这是关于 p3p 标头的一个很好的解释Cookie 阻止/未保存在 Internet Explorer 的 IFRAME 中

于 2013-04-07T10:33:09.280 回答