【问题标题】:setting cookie through curl通过 curl 设置 cookie
【发布时间】:2011-08-25 19:40:55
【问题描述】:

我试图在 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 信息写入文件,但在获取页面时不读取它。 有人可以帮忙吗?

【问题讨论】:

    标签: php cookies libcurl


    【解决方案1】:

    由于 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. 它被发送到浏览器。

    这是一种特殊情况,您使用 curl 从 localhost 获取内容,但在实际使用中,您将使用 curl 从第三个主机获取内容。

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

    【讨论】:

    • 但是发送带有 cookie 信息的标头意味着我不需要设置 CURLOPT_COOKIE 选项。我觉得不太好。
    • 在意识到 curl 获取的内容不依赖于 cookie 是否存在后,我更新了答案,因此,通过 curl 获取 html 页面时,您不需要 cookie,但是您当内容到达浏览器时确实需要它。这就是上面所做的。我会把感情放在一边做一个测试。
    • @Majid Fouladpour:但是这种方式我不是使用 curl 来设置 cookie,而是依赖于 header。如果我需要使用 curl 怎么办?我使用了 CURLOPT_COOKIEFILE 和 CURLOPT_COOKIEJAR 之类的选项,但他也不起作用。没有出路吗?
    • 为答案添加了解释。
    • @Majid Fouladpour:我已经更改了我的代码,需要你的帮助。这是我的新 post。请检查一下
    【解决方案2】:

    JavaScript 无法通过 curl 获取页面。

    【讨论】:

    • 那么如果我不使用 javascript,我的 html 页面将如何检查 cookie?
    • 在 PHP 中,查看 $_COOKIE。您的服务器端代码也可以与 cookie 交互,而不仅仅是 javascript。
    • 不,只有当你有 php 页面并通过 $_COOKIES 检查它时
    • @El yobo:但是我必须将 html 放入 php 文件中。这可能是一个解决方案,但你能看看上面的代码有什么问题吗?我卡在这个问题上太久了,我不知道这是什么问题?
    猜你喜欢
    • 2015-10-17
    • 2012-07-21
    • 2013-12-29
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2014-07-07
    相关资源
    最近更新 更多