【问题标题】:curl php setting cookies properlycurl php正确设置cookie
【发布时间】:2014-07-07 20:51:35
【问题描述】:

我遇到了一些 cookie 问题。它们似乎没有按应有的方式设置,我无法弄清楚原因。 url 加载 urls 详细信息,然后设置 cookie,然后将它们重定向回主站点。这是我正在使用的 php 代码

$cookie_file_path = 'cookie-path.txt';

// open a site with cookies
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.stuller.com/s/user');
curl_setopt($ch, CURLOPT_HEADER  ,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION  ,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);   // Cookie management.
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
$content = curl_exec($ch);

// get cookies
$cookies = array();
preg_match_all('/Set-Cookie:(?<cookie>\s{0,}.*)$/im', $content, $cookies);

echo "<pre>";
print_r($cookies['cookie']); // show harvested cookies
echo "</pre>";
exit;

当我回显 cookie 时,我看到的是这样的:

Array(
[0] =>  cart_session_id=365ad5b7-9ece-4255-aa68-3590d8841c17; expires=Tue, 19-May-2015 19:05:46 GMT; path=/
[1] =>  CartRefresh=5/19/2014 2:05:46 PM; expires=Tue, 20-May-2014 07:05:46 GMT; path=/
[2] =>  ASP.NET_SessionId=yyloxijj2mke1ozxwg203mxh; path=/; HttpOnly
[3] =>  user_session_id=27c284ec-c5da-4c79-b860-f7bce9efac78; path=/
[4] =>  cms#51642=12719; expires=Tue, 19-May-2015 19:05:46 GMT; path=/
[5] =>  cms#51772=152; expires=Tue, 19-May-2015 19:05:46 GMT; path=/
[6] =>  cms#52083=13824; expires=Tue, 19-May-2015 19:05:46 GMT; path=/
[7] =>  cms#52113=32; expires=Tue, 19-May-2015 19:05:46 GMT; path=/
[8] =>  cms#52229=50; expires=Tue, 19-May-2015 19:05:46 GMT; path=/
[9] =>  cms#52237=59; expires=Tue, 19-May-2015 19:05:46 GMT; path=/
}

但在我的 cookie 文件中,似乎一切都是错误的,并且没有设置任何内容:

www.stuller.com FALSE   /   FALSE   1432062346  cart_session_id 365ad5b7-9ece-4255-aa68-3590d8841c17
www.stuller.com FALSE   /   FALSE   1400569546  CartRefresh 5/19/2014 2:05:46 PM
#HttpOnly_www.stuller.com   FALSE   /   FALSE   0   ASP.NET_SessionId   yyloxijj2mke1ozxwg203mxh
www.stuller.com FALSE   /   FALSE   0   user_session_id 27c284ec-c5da-4c79-b860-f7bce9efac78
www.stuller.com FALSE   /   FALSE   1432062346  cms#51642   12719
www.stuller.com FALSE   /   FALSE   1432062346  cms#51772   152
www.stuller.com FALSE   /   FALSE   1432062346  cms#52083   13824
www.stuller.com FALSE   /   FALSE   1432062346  cms#52113   32
www.stuller.com FALSE   /   FALSE   1432062346  cms#52229   50
www.stuller.com FALSE   /   FALSE   1432062346  cms#52237   59

我做错了什么,为什么他们没有正确设置?另外,我如何读取这些 cookie 以用于下一个 curl 方法,因为大约会发生 4 或 5 跳?

谢谢

【问题讨论】:

  • 为什么您认为它们没有正确设置?文件中的所有 cookie 名称和值都与您从标题中提取的内容相匹配。
  • 正如我在您的另一个问题 stackoverflow.com/questions/23746403/… 中解释的那样,FALSE 列与是否设置了 cookie 无关,它们只是 cookie 的布尔属性。
  • 我想这让我很困惑。在标题中,它们不显示 False/False,但在 cookie 文件中却显示,这让我认为 cookie 设置不正确。尤其是当我尝试为下一次 curl 再次读取 cookie 时,我在服务器上收到错误消息。
  • 好的,那么当将 cookie 传递给下一次 curl 尝试时,我只使用 CURLOPT_COOKIEFILE 那么正确吗?这个 curl 甚至应该有与之关联的 COOKIEFILE 吗?
  • CURLOPT_COOKIEJAR 用于传入 cookie 更新,CURLOPT_COOKIEFILE 用于传出 cookie。使用两者来将 cookie 从一次调用保存到下一次调用。

标签: php cookies curl


【解决方案1】:

如果您想发送 cookie,请使用CURLOPT_COOKIEFILE 选项。

如果您想接收 cookie 并保存它们,请使用CURLOPT_COOKIEJAR 选项。

如果您想发送以前保存的 cookie 并使用服务器所做的任何更改来更新文件,请使用这两个选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 2015-10-17
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2012-05-19
    相关资源
    最近更新 更多