为什么php curl不会在我的cookiefile中保存cookie?

时间:2013-10-10 12:19:33

标签: php cookies curl cookiejar

我正在尝试在curl cookiejar中保存一个cookie。我简化了我的代码,但它没有用。

<?php

$cookie_file = './cookies.txt';

if (! file_exists($cookie_file) || ! is_writable($cookie_file)){
    echo 'Cookie file missing or not writable.';
    exit;
}//cookie_file is writable, so this is not the issue

$ch = curl_init (html_entity_decode("http://localhost/kiala_test/setcookie.php"));
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 1);
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$output = curl_exec ($ch);
echo $output;
?> 

setcookie.php

<?php 
$value = 'something from somewhere';
setcookie("TestCookie", $value);

?>

收到标题

  

HTTP / 1.1 200 OK日期:2013年10月10日星期四12:10:37 GMT服务器:   Apache / 2.4.4(Win64)PHP / 5.4.12 X-Powered-By:PHP / 5.4.12 Set-Cookie:   TestCookie =某事+来自+某处Content-Length:0 Content-Type:   text / html的

所以testcookie在标题中,但我的cookiefile保持空白。我做错了什么?我可以尝试使这个例子有效吗?谢谢!

3 个答案:

答案 0 :(得分:17)

设置CURLOPT_COOKIEJAR时,需要使用绝对路径。您可以使用以下方法轻松完成此操作:

curl_setopt ($ch, CURLOPT_COOKIEJAR, realpath($cookie_file) );

参考:cannot use cookies in cURL PHP

答案 1 :(得分:0)

关于CURLOPT_COOKIEJAR的{​​{3}}:

  

在关闭句柄时将所有内部cookie保存到的文件的名称,例如在调用curl_close之后。

因此,您的代码中没有使用curl_close

curl_close($ch);之后使用curl_exec,将cookie保存在jar文件中。

答案 2 :(得分:0)

是的,realpath是可行的,但请记住(由于php.net),在第二次调用curl_exec之前,CURLOPT_COOKIEFILE应该与CURLOPT_COOKIEJAR的先前设置相同-因为它用于读取“罐装”文件中的内容:)

//my working snippet for one php file:
//....
curl_setopt($ch, CURLOPT_COOKIEJAR, realpath('test2-cookie.txt'));
$content = curl_exec($ch);
curl_close($ch); 
$ch = curl_init();  
curl_setopt($ch, CURLOPT_COOKIEJAR, realpath('test2-cookie.txt'));
curl_setopt ($ch, CURLOPT_COOKIEFILE, realpath('test2-cookie.txt'));
$content = curl_exec($ch);//second call