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 позаботится.