Cookiejar в PHP Curl
В случае PHP Curl, когда нам нужно хранить/читать файлы cookie с точки зрения веб-очистки, он считает, что многие ресурсы там рекомендуют использовать файл для обработки файлов cookie с помощью этой опции
curl_setopt($ch, CURLOPT_COOKIEJAR, $CookieJarFilename);
curl_setopt($ch, CURLOPT_COOKIEFILE, $CookieJarFilename);
В нижней строке здесь используется один файл как файл cookiejar (обычно .txt).
Но в реальном сценарии наш веб-сайт не только доступен одному компьютеру, но, скорее всего, к нему одновременно подключается множество компьютеров, а также есть такие боты, как роботы Google, Yahoo Slurp и т.д.
Итак, с файлом single.txt, не очевидно ли, что кусок файла cookie будет перезаписывать один и тот же текстовый файл, сделать его настоящим беспорядком для файла cookie?
Или я ошибаюсь здесь?
Какой "правильный" способ обработки файлов cookie?
Ответы
Ответ 1
Если на вашей странице есть несколько пользователей, и вам нужно выполнить curl
с уникальными куки файлами для всех, то для обработки этого сценария есть несколько вещей.
1) Если ваш пользователь аутентифицирован и имеет $_SESSION
, запущенный на вашем конце, вы можете использовать имя файла session_id()
для файла cookie.
2) Если ваш пользователь не требует сеанса (например, бота Google), вы можете создать файл cookie с использованием timestamp + дополнительного случайного числа для вашего имени файла cookie. Например:
$cookieName = time()."_".substr(md5(microtime()),0,5).".txt";
// Would output something like:
// `1388788940_91ab4.txt`
Но в этом случае вы не можете повторно использовать файл cookie, если пользователь вернется к вам через 5 минут (если вы не установите файл cookie пользователя с вашим файлом файла cookie).
В обоих случаях убедитесь, что вы периодически очищаете эти файлы. В противном случае у вас будет множество файлов cookie, созданных в вашем каталоге.
Ответ 2
Если вы хотите, чтобы PHP выполнял очистку для вас.
Используйте tempnam, как bagz_man, но после использования прочитайте содержимое файла и сохраните его в своем сеансе. Затем вы можете удалить временный файл. Создайте новый файл в следующий раз, когда вам это нужно.
Остается только сеанс, на который php позаботится.