PHP:ficking CURL';把Cookiejar变成$Session变量?

PHP:ficking CURL';把Cookiejar变成$Session变量?,php,session,cookies,curl,Php,Session,Cookies,Curl,据我所知,curl使用cookiefile参数读取cookies,并在curl会话完成后使用cookiejar保存cookies 使用这个的典型示例表明必须使用一个文件,但我不想手动清理这些剩余的位。 例如,如果我使用tempnam将cookiejar设置为一个文件,我将不可避免地得到一个目录,其中充满了需要清理的小cookiejar 如果用户正确地注销,我当然可以删除这个临时文件,但我指望大多数用户只是关闭浏览器窗口,会话(最终)就会过期,这使我无法自动删除cookie jar 到目前为止,我

据我所知,curl使用cookiefile参数读取cookies,并在curl会话完成后使用cookiejar保存cookies

使用这个的典型示例表明必须使用一个文件,但我不想手动清理这些剩余的位。 例如,如果我使用tempnam将cookiejar设置为一个文件,我将不可避免地得到一个目录,其中充满了需要清理的小cookiejar

如果用户正确地注销,我当然可以删除这个临时文件,但我指望大多数用户只是关闭浏览器窗口,会话(最终)就会过期,这使我无法自动删除cookie jar

到目前为止,我最好的办法是将一个cookiejar放入temp文件夹,将其读入会话变量,然后每次使用curl时删除cookiejar文件


以前的用户实现是通过解析头信息来避免cookiejar,但这是我想得到的更复杂一点。

决定使用临时文件环绕方法。假设您的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总是在脚本末尾被删除,只要所述脚本不会过早终止。

您可以在客户端和其他服务器之间传递头,而不是解析它们。只要记住在set cookie case中为“domain=[^;]+”部分添加regex替换即可。

这是一个有趣的想法,只要反射的服务器不关心从我的服务器传递的外来cookie。我试试看!