Facebook画布url已重定向到https

Facebook画布url已重定向到https,facebook,canvas,https,Facebook,Canvas,Https,我有一个Facebook应用程序,它同时具有画布url和安全画布url 当我的用户在页面选项卡中打开应用程序时,我的应用程序将读取带有页面id的签名请求,并提供此特定FB页面的内容 当我的用户在FB中使用https冲浪注销,而下一个用户仅使用http冲浪登录时,我的应用程序被重定向到安全画布url,并且我的签名请求参数丢失。如果没有signed_request参数,我无法确定我的应用程序应该为哪个页面提供服务 当我清空浏览器缓存时,将使用我应用程序的正确http URL 是否有办法始终在FB应用

我有一个Facebook应用程序,它同时具有画布url和安全画布url

当我的用户在页面选项卡中打开应用程序时,我的应用程序将读取带有页面id的
签名请求
,并提供此特定FB页面的内容

当我的用户在FB中使用
https
冲浪注销,而下一个用户仅使用
http
冲浪登录时,我的应用程序被重定向到安全画布url,并且我的
签名请求
参数丢失
。如果没有
signed_request
参数,我无法确定我的应用程序应该为哪个页面提供服务

当我清空浏览器缓存时,将使用我应用程序的正确http URL

是否有办法始终在FB应用程序中使用
https
,或阻止浏览器缓存
https
URL


谢谢

如果希望从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();
}

如果希望从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();
}

对不起,我认为你没有权利。你的应用程序被Facebook以$u POST['signed\u request']方式调用。此外,Facebook每次通过https调用我的tab应用程序,无论是通过http还是https加载的FB页面。OK,问题似乎是Chrome特有的:对不起,但我认为你没有权利。你的应用程序被Facebook以$u POST['signed\u request']方式调用。此外,Facebook每次通过https调用我的tab应用程序,无论是通过http还是https.OK加载的FB页面,问题似乎都与Chrome有关: