2013-04-06 58 views
0

我正在使用laravel构建Facebook应用程序,并且在我的代码中使用Redirect::to('thank_you')在用户提交表单后将用户重定向到感谢页面。重定向::到()清除Facebook访问令牌

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

有什么好解释当然Laravel不使用'$ _SESSION'全球?据我所知,Symfony(Laravel的核心组件)清空变量,并将所有内容存储在'Session'助手中?因此,你会使用'Session :: get()'来代替? – 2013-04-06 10:39:18

+0

是的,这是我的旧代码,我已经改为使用Session类。但$ _SESSION实际上工作正常。但这不是我的观点,因为在会话中存储访问令牌的这种解决方案会造成用户无法注销的问题。 – 2013-04-06 10:50:36

回答

0

如果应用程序是一个iframe内(如一个Facebook应用程序画布或页面标签应用),那么你需要设置一个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