Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Curl中的cookiejar_Php_Cookies_Curl - Fatal编程技术网

PHP Curl中的cookiejar

PHP Curl中的cookiejar,php,cookies,curl,Php,Cookies,Curl,在PHP Curl中,当我们需要根据web抓取来存储/读取Cookie时,很多资源都鼓励使用文件来处理具有这些选项的Cookie curl_setopt($ch, CURLOPT_COOKIEJAR, $CookieJarFilename); curl_setopt($ch, CURLOPT_COOKIEFILE, $CookieJarFilename); 这里的底线是他们使用一个文件作为cookiejar(通常是.txt文件) 但在真实的场景中,我们的网站不仅由一台计算机访问,很可能有多台

在PHP Curl中,当我们需要根据web抓取来存储/读取Cookie时,很多资源都鼓励使用文件来处理具有这些选项的Cookie

curl_setopt($ch, CURLOPT_COOKIEJAR, $CookieJarFilename);

curl_setopt($ch, CURLOPT_COOKIEFILE, $CookieJarFilename);
这里的底线是他们使用一个文件作为cookiejar(通常是.txt文件)

但在真实的场景中,我们的网站不仅由一台计算机访问,很可能有多台计算机同时访问,还有一些机器人,如谷歌机器人、雅虎Slurp等

因此,使用single.txt文件,cookie jar是否会覆盖同一个文本文件,使cookie变得一团糟

还是我弄错了


处理Cookie的“正确”方法是什么?

如果有多人访问您的页面,并且您需要为每个人使用唯一的Cookie执行
curl
,那么您可以做一些事情来处理此情况

1) 如果您的用户经过身份验证,并且在您的终端启动了一个
$\u会话
,那么您可以使用
会话id()
作为cookie的文件名

2) 如果您的用户不需要任何会话(例如,谷歌机器人),您可以使用时间戳+cookie文件名的额外随机数来创建cookie。例如:

$cookieName = time()."_".substr(md5(microtime()),0,5).".txt"; 
// Would output something like:
// `1388788940_91ab4.txt`
但是在这种情况下,如果用户在5分钟后返回给您,您就不能重用cookie(除非您使用cookie文件名设置用户的cookie)


对于这两种情况,请确保定期清理这些文件。否则,您将在目录中创建大量cookie文件。

如果您希望PHP为您进行清理

像bagz_man所说的那样使用tempnam,但是在使用它之后读取文件内容并将其存储在会话中。然后可以删除临时文件。下次需要时创建一个新文件


唯一剩下的就是php处理的会话。

就像他所说的,如果不删除这些文件,Linux将耗尽支撑整个操作系统的“inode”,即使磁盘未满。去过那里,做过那件事:-)