https使用php重定向到另一个域的请求

时间:2015-03-02 12:40:26

标签: php redirect curl https cross-domain

我在一个域上有自动登录链接 - 此域名用于授权:

https://example.com/api/login/{key}/{username}

关注此链接后,用户将被重定向到控制面板:

https://example.com

如果出现问题 - 用户重定向到

https://example.com/login page.

在另一个域example2.com中,用户拥有结算面板,并在其中放置了https://example.com/api/login/{key}/{username}链接。

所以我需要从example2.comexample.com进行检查:

$url = https://example.com/api/login/{key}/{username};
if function-to-check-autologin($url) == "true" {
  //do something
}

我的搜索结果是卷曲,但我不能自己配置请求。

我怎么能这样做?卷曲或其他方式?

2 个答案:

答案 0 :(得分:0)

您还没有解释'自动登录'是什么,或者它是如何工作的。您的所有域名都是“example.com”,因此它们都是相同的域名。当然,你不容易让人们理解你的问题。我会试着说出我对它的理解。

  

您已经有一个用户登录了一个互联网域,并且您想要重定向   他们到第二个域,他们应该保持登录状态。

有很多方法可以做到这一点,但它们都取决于某些条件。

  1. 如果您使用标准的http登录方法,则可以使用以下方法重定向到第二个域:

    https://username:password@example.com

  2. 由于您表明您在两个网站上使用的SSL证书都是合理安全的。即使您不共享数据库,这也会有效。

    1. 如果两个域都使用相同的数据库,则可以将加密链接切换到用户的登录会话。这就是我正常做的方式。我在我的数据库中保存会话,每个会话都有一个ID。我加密,任何好的方法都会这样做,然后将它发送到我解密它的第二个域:

      https://example.com?key=DgGyC28Sw3eQFvY9hz2dBkfmCa5zMgV6nN4Jj8VeD76chf7

    2. 当然,会话本身应该告诉您用户是否已登录。确保您的加密方法是安全的。

      在这两种情况下,如果URL落入坏人之手,登录可能会被伪造。这就是使用SSL很重要的原因,但仍存在一些风险。

答案 1 :(得分:0)

虽然你的问题很模糊,但我会给你一些线索。

首先,您必须将CURLOPT_SSL_VERIFYPEER选项设置为false,除非您要处理同行的证书。

此外,您必须告诉CURL处理重定向。这假设您设置CURLOPT_FOLLOWLOCATION选项以及CURLOPT_MAXREDIRSCURLOPT_AUTOREFERER

为了发送带有请求的POST数据,您必须将CURLOPT_POST选项设置为true,将CURLOPT_POSTFIELDS设置为POST数据或url编码字符串数组。

完成CURL请求后,您可以通过curl_getinfo函数了解有关它的所有信息。使用CURLINFO_REDIRECT_COUNT作为第二个参数调用它将提供重定向的数量,并CURLINFO_EFFECTIVE_URL - 最后一个有效的URL。

所以代码可能如下所示:

$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL => $url,
    CURLOPT_NOBODY => false,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_MAXREDIRS => 1,
    CURLOPT_AUTOREFERER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $data_array,
));
$response = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_REDIRECT_COUNT) == 1 && curl_getinfo($ch, CURLINFO_EFFECTIVE_URL) == $sample_redirect_url)
    echo 'OK';