在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的“正确”方法是什么?
答案 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负责处理。