我有一个Facebook应用程序,包括画布网址和安全画布网址。
当我的用户在页面标签中打开应用时,我的应用会使用signed_request
读取page id
并为此特定FB页面提供内容。
当我的用户在FB注销中使用https
冲浪并且下一个用户仅使用http
冲浪登录时,我的应用会被重定向到安全画布网址和我的{{1} }参数丢失。如果没有signed_request
参数,我无法确定我的应用应该为哪个页面提供服务。
当我清空浏览器缓存时,会使用我应用的正确http网址。
是否有办法始终对FB应用使用signed_request
,或阻止浏览器缓存https
网址?
谢谢!
答案 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();
}