通过卷曲设置cookie

时间:2011-05-15 08:01:08

标签: php cookies libcurl

我试图在PHP中通过cURL设置cookie,但它失败了。我的PHP代码看起来像这样

$ch=curl_init();
$url="http://localhost/javascript%20cookies/test_cookies.html";
curl_setopt($ch, CURLOPT_COOKIE, 'user=1');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
echo $contents;
?>

文件test_cookies.html包含检查cookie的javascript,如果它发现它与其他用户内容显示内容。 但是当我使用上面的脚本时,它会显示页面test_cookies.html的内容,但不显示其他用户内容,这意味着它没有设置cookie。

我试着写这样的另一个剧本

<?php
header("Set-Cookie:user=1");
header("Location:test_cookies.html");
?>

这可以工作并设置cookie并显示其他用户内容。 我也尝试过使用

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

这是将cookie信息写入文件,但在获取页面时不读取它。 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

由于javascript在浏览器中进行检查,因此您应该在将输出发送到浏览器之前设置cookie。所以你需要结合两个脚本:

$ch=curl_init();
$url="http://localhost/javascript%20cookies/test_cookies.html";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
header("Set-Cookie:user=1");
echo $contents;

说明:
请注意,我们正在寻找两个转机:

  1. 数据由curl提取,然后
  2. 将其发送到浏览器。
  3. 这是一个特殊情况,您使用curl从localhost获取内容,但在现实生活中,您使用curl从第三个主机获取内容。

    如果根据请求中是否发送了cookie而收到不同的内容,则应使用curl设置cookie。在大多数情况下,您可以在不向浏览器进行额外调整的情况下发送内容。但是在这里,您通过在浏览器中检查cookie 来做出决定,因此您不需要第一个cookie设置,您需要第二个。< / p>

答案 1 :(得分:1)

从curl获取页面无法使用JavaScript。