распараллельте утечки, Вы часто забываете считать количество потоков
Вы можете использовать параметр CURLOPT_COOKIEJAR
и установить для файла значение « / dev / null
» для Linux / MacOS X или « NULL
» для Windows . Это предотвратит запись файлов cookie на диск, но сохранит их в памяти, пока вы повторно используете дескриптор и не вызываете curl_easy_cleanup ()
.
К сожалению, я не думаю, что вы можете использовать php: // memory в качестве потока ввода и вывода. Обходной путь - самостоятельно проанализировать заголовки. Сделать это довольно просто. Вот пример страницы, которая выполняет два запроса и сама передает файлы cookie.
curl.php:
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://localhost/test.php?message=Hello!');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($curl);
curl_close($curl);
preg_match_all('|Set-Cookie: (.*);|U', $data, $matches);
$cookies = implode('; ', $matches[1]);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://localhost/test.php');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_COOKIE, $cookies);
$data = curl_exec($curl);
echo $data;
?>
test.php:
<?php
session_start();
if(isset($_SESSION['message'])) {
echo $_SESSION['message'];
} else {
echo 'No message in session';
}
if(isset($_GET['message'])) {
$_SESSION['message'] = $_GET['message'];
}
?>
Будет выведено сообщение «Hello!» по второму запросу.
Если вы используете Linux, вы можете настроить их так, чтобы они указывали где-нибудь в / dev / shm .. это сохранит их в памяти, и вы можете быть уверены, что они не сохранятся при повторной загрузке.
Мне почему-то казалось, что очистка Curl обрабатывает отключение файлов cookie, но я мог ошибаться.