2012-02-08 73 views
2

我有兩個,帆布URL和安全畫布URL一個Facebook應用程序。Facebook畫布頁URL重定向到https

當我的用戶在頁面選項卡中打開應用程序時,我的應用程序使用page id讀取signed_request,併爲此特定FB頁面提供內容。

當我的用戶使用https衝浪在FB註銷,並與只http衝浪下一個用戶日誌,我的應用程序被重定向到安全畫布URL和我signed_request參數丟失。如果沒有signed_request參數,我不能確定哪些網頁應該由我的應用程序提供服務。

當我清空瀏覽器緩存,用我的應用程序的正確HTTP URL。

有沒有辦法總是使用https FB應用程序,或阻止瀏覽器緩存https的URL?

謝謝!

+0

對不起,但我不認爲你是對的。您的應用程序是通過與Facebook的$ _ POST [「signed_request」]反正叫。此外,通過HTTPS稱爲被Facebook我的選項卡的應用程序每次,不管通過HTTP或HTTPS加載的FB頁面。 – 2012-02-08 22:06:34

+0

好吧,似乎問題是Chrome特定的: http://stackoverflow.com/questions/8571339/chrome-not-getting-the-signed-request-post-data – 2012-02-09 10:43:13

回答

0

如果您想從http重定向到https並且不會丟失signed_request POST參數,則可以在重定向之前手動阻止它並將其作爲GET參數附加到URL。見下文!

// Force SSL 
if(443 != $_SERVER['SERVER_PORT'] || 'on' != $_SERVER['HTTPS']) 
{ 
    $queryString = $_SERVER['QUERY_STRING']; 
    $hadQueryString = '' == $queryString ? false : true; 
    $baseUrl = $_SERVER['REQUEST_URI']; 
    $questionMark = strpos($_SERVER['REQUEST_URI'], '?'); 

    if(false !== $questionMark) 
    { 
     $baseUrl = substr($_SERVER['REQUEST_URI'], 0, $questionMark); 
    } 

    if($hadQueryString && isset($_REQUEST['signed_request'])) 
    { 
     $queryString = $_SERVER['QUERY_STRING'] . '&signed_request=' . $_REQUEST['signed_request']; 
    } 
    elseif(isset($_REQUEST['signed_request'])) 
    { 
     $queryString = 'signed_request=' . $_REQUEST['signed_request']; 
    } 

    $newLocation = 'https://' . $_SERVER['HTTP_HOST'] . $baseUrl . '?' . $queryString; 

    header('HTTP/1.1 301 Moved Permanently'); 
    header('Location: ' . $newLocation); 
    exit(); 
}