Facebook画布网址重定向到https

时间:2012-02-08 15:59:18

标签: facebook canvas https

我有一个Facebook应用程序,包括画布网址和安全画布网址。

当我的用户在页面标签中打开应用时,我的应用会使用signed_request读取page id并为此特定FB页面提供内容。

当我的用户在FB注销中使用https冲浪并且下一个用户仅使用http冲浪登录时,我的应用会被重定向到安全画布网址和我的{{1} }参数丢失。如果没有signed_request参数,我无法确定我的应用应该为哪个页面提供服务。

当我清空浏览器缓存时,会使用我应用的正确http网址。

是否有办法始终对FB应用使用signed_request,或阻止浏览器缓存https网址?

谢谢!

1 个答案:

答案 0 :(得分: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();
}