0

我需要让我的用户通过 iframe 访问远程管理仪表板软件。软件开发人员向我提供了包含在我的页面中的 Curl 代码,并且此代码运行良好......除了我在使用某些特定浏览器时遇到问题的事实。

实际上,我可以使用任何浏览器毫无问题地访问仪表板,但是当我想访问某个特定的远程页面(通过单击仪表板本身中的相关链接)时,我收到来自远程服务器的消息,说我必须登录才能查看那些页面。这很奇怪,因为我已经登录,否则无法看到仪表板。

使用 IE 和 Safari 时会出现问题,但使用 Chrome 或 Firefox 时不会出现问题...我的站点和远程服务器不使用 SSL...现在我们调查了很多天以进行故障排除但没有成功。我在不同位置的 Window 和 Ubuntu 下使用不同的 PC 进行了测试......太疯狂了...... :-(

在使用的代码下方......有人知道为什么我只在某些特定浏览器上遇到问题?

<?php
    $api_key = '123-my-api-key-456';
    $admin_email = 'my@email.com';
?>

<?php
    $response_raw = null;
    $api_url = "http://www.remote-server.com/rest/?api_key=$api_key&method=get_login_credentials&email=$admin_email";
    if (function_exists('curl_init')) {
        $cs = @curl_init($api_url);
        if ($cs) {
            @curl_setopt ($cs, CURLOPT_RETURNTRANSFER, 1); 
            $response_raw = @curl_exec ($cs);
            @curl_close ($cs);
        }
    }
    if (!$response_raw)
        $response_raw = file_get_contents($api_url);

    $response_json = json_decode($response_raw, true);
    $login_hash = $response_json['data']['login_hash'];
    $user_id = $response_json['data']['user_id'];
    if ($_REQUEST['mbm_gotourl'])
        $iframe_url = $_REQUEST['mbm_gotourl'] . (strpos($_REQUEST['mbm_gotourl'], '?') === false ? "?" : "&") . "login_hash=".$login_hash."&user_id=".$user_id."&mbm_iframe=1";
    else
        $iframe_url = "http://www.remote-server.com/admin.php?custom-language=FR&login_hash=".$login_hash."&user_id=".$user_id."&mbm_iframe=1";

    if ($login_hash && $user_id) {
?>
    <iframe id='mbm_be_frame' src='<?php echo $iframe_url;?>' width='944' scrolling='no' frameborder='0' ></iframe>
    <script type='text/javascript' src='http://www.remote-server.com/mbm-be.js'></script>
<?php
    }
?>
4

1 回答 1

0

好的,我终于找到了问题的原因。问题来自 Safari 以不同方式处理的跨域 cookie。这个另一个问题给了我一些线索,让我解决这个问题:

在 Safari 中设置跨域 cookie

所以在实践中,这不是一个卷曲问题,而是一个 cookie 问题......

于 2013-05-03T19:04:51.767 回答