使用PHP curl发送存储在$ _COOKIE global上的cookie

时间:2012-10-23 10:17:02

标签: php curl

我有两个网站 dev1.test.com dev2.test.com

这些是在不同服务器上运行的两个站点。 dev1.test.com是我登录的地方,我将cookie设置为 * .test.com 以验证用户是否已登录。

现在在dev2.test.com上,我想通过向dev1.test.com发送PHP CURL请求来检查当前用户是否已登录。在我的curl请求中,我想要将$ _COOKIE的内容(其中包含* .test.com的cookie信息)包含在此curl请求中。

我应该如何在php curl中做到这一点?

4 个答案:

答案 0 :(得分:9)

由于您有通配符cookie域,因此dev2也将具有与dev1相同的cookie。所以基本上你需要说“通过curl将我的cookie传递给另一台服务器。

你想要的卷曲选项是“CURLOPT_COOKIE”,你传入一串饼干“name1 = value1; name2 = value2”

将它们放在一起(未经测试 - 当然,您需要将其包装在其他卷曲功能中)

$cookiesStringToPass = '';
foreach ($_COOKIE as $name=>$value) {
    if ($cookiesStringToPass) {
        $cookiesStringToPass  .= ';';
    }
    $cookiesStringToPass .= $name . '=' . addslashes($value);
}
curl_setopt ($ch, CURLOPT_COOKIE, $cookiesStringToPass );

答案 1 :(得分:3)

这就是我用来通过curl转发$ _COOKIE:

$cookie_data =
  implode(
    "; ",
    array_map(
      function($k, $v) {
        return "$k=$v";
      },
      array_keys($_COOKIE),
      array_values($_COOKIE)
    )
  );
curl_setopt($ch, CURLOPT_COOKIE, $cookie_data);

参考:http://php.net/manual/en/function.curl-setopt.php

答案 2 :(得分:2)

您可以使用包含HTTP标头字符串的$_COOKIE,而不是使用$_SERVER['HTTP_COOKIE']

即。你只需要写下这个:

curl_setopt($ch, CURLOPT_COOKIE, $_SERVER['HTTP_COOKIE']);

答案 3 :(得分:1)

阅读本文:http://be2.php.net/manual/en/function.curl-setopt.php

CURLOPT_COOKIEFILECURLOPT_COOKIEJAR

所以你必须从一台服务器上读取$_COOKIE,将其保存到文件中,然后将其发送给另一台服务器

看起来像是:

curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");