2013-04-06 40 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