PHP Curl中的cookiejar

时间:2014-01-03 05:03:58

标签: php cookies curl

在PHP Curl的情况下,当我们需要在网页抓取时存储/读取cookie时,感觉很多资源鼓励使用文件来处理带有这些选项的cookie

curl_setopt($ch, CURLOPT_COOKIEJAR, $CookieJarFilename);

curl_setopt($ch, CURLOPT_COOKIEFILE, $CookieJarFilename);

这里的底线是他们使用单个文件作为cookiejar(通常是.txt文件)。

但在真实场景中,我们的网站不仅可以通过一台计算机访问,而且很可能有很多计算机同时访问它,还有一些机器人,如Googlebots,Yahoo Slurp等。

所以,使用单个.txt 文件,cookie jar是否会覆盖相同的文本文件,这对于cookie来说真是一团糟?

或者我错了?

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

2 个答案:

答案 0 :(得分:9)

如果有多个人访问您的网页,并且您需要为每个人执行带有唯一Cookie的curl,那么您可以采取以下措施来处理此方案。

1)如果您的用户经过身份验证并且已经开始$_SESSION,那么您可以使用session_id()作为Cookie的文件名。

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

$cookieName = time()."_".substr(md5(microtime()),0,5).".txt"; 
// Would output something like:
// `1388788940_91ab4.txt`

但在这种情况下,如果用户在5分钟后返回给您,则无法重复使用Cookie(除非您使用Cookie文件名设置用户的Cookie)。

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

答案 1 :(得分:0)

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

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

唯一遗留的是会话,php负责处理。