PHP curl从多个域获取cookie

时间:2010-11-04 15:45:40

标签: php session cookies curl

我在main.com上设置了cookie,但是我需要从我的其他domain2.com获取这些cookie,如何用curl或其他方式做到这一点?

这是我在domain2.com/get.php中的代码:

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, 'http://main.com');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_HEADER, true);  
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

$data = curl_exec($curl);
curl_close($curl);

preg_match_all('#Set-Cookie: (.*);#U', $data, $matches);   
$cookies = implode(';', $matches[1]);

echo $cookies;

有可能吗?

1 个答案:

答案 0 :(得分:1)

由于Same origin policy,这是不可能的。浏览器永远不会将main.com cookie发送到domain2.com,而cURL只会充当访问main.com的新HTTP客户端;它会获得新的cookie,但它们与访问者没有任何关系。

要进行跨域会话,您需要访问一台服务器以在两者上建立会话。例如。当用户访问main.com时,HTML输出包含一个空图像http://domain2.com/setCookie?sess=<main_session_Id>。 domain2.com上的脚本将设置会话cookie,结果是客户端在两个域上都以相同的会话cookie结束。然后,域可以使用后端请求(如果不在同一台计算机上)来共享信息。

跨域会话管理往往很混乱,并且充满了警告。寻找经过良好测试的解决方案,而不是自己制作。