据我了解,curl使用cookiefile参数读取cookie,并在curl会话完成后使用cookiejar保存它们。
使用它的典型示例表明必须使用文件,但我不想手动清理这些剩余的位。 例如,如果我使用tempnam将cookiejar设置为一个文件,我将不可避免地得到一个完整的小cookiejars目录,我需要清理它。
如果用户正确注销,我当然可以删除这个临时文件,但我指望大多数用户只是关闭浏览器窗口并且会话(最终)到期,让我无法删除饼干罐自动。
到目前为止,我最好的想法是将一个cookiejar放入temp文件夹,将其读入一个会话变量,然后在每次使用curl时删除cookiejar文件。
以前用户的实现是通过解析头信息来避免cookiejar,但这是我想要的更多参与。
答案 0 :(得分:1)
决定采用临时文件环绕方法。假设你的curl处理程序名为$ c:
//Put down the cookieJar
$cookieJar = tempnam(sys_get_temp_dir(),"cookie-");
if (isset($_SESSION['c_Cookies'])) file_put_contents($cookieJar, $_SESSION['c_Cookies']);
curl_setopt($c, CURLOPT_COOKIEJAR, $cookieJar);
curl_setopt($c, CURLOPT_COOKIEFILE, $cookieJar);
并在脚本的末尾:
//Always destroy curl, just in case...
curl_close ($c);
unset($c);
//And pickup the cookieJar
$_SESSION['c_Cookies'] = file_get_contents($cookieJar);
unlink($cookieJar);
这当然假设系统临时目录可由运行php的任何人写入。它应该确保在脚本结束时始终删除cookiejar,只要所述脚本不会过早终止。
答案 1 :(得分:1)
您可以直接在客户端和其他服务器之间传递标头,而不是解析它们。只需记住为" domain = [^;] +"添加正则表达式替换。参与set-cookie案例。