PHP:将CURL的Cookie Jar填充到$ Session变量中?

时间:2014-04-02 03:51:37

标签: php session cookies curl

据我了解,curl使用cookiefile参数读取cookie,并在curl会话完成后使用cookiejar保存它们。

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

如果用户正确注销,我当然可以删除这个临时文件,但我指望大多数用户只是关闭浏览器窗口并且会话(最终)到期,让我无法删除饼干罐自动。

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

以前用户的实现是通过解析头信息来避免cookiejar,但这是我想要的更多参与。

2 个答案:

答案 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案例。