我使用CURLOPT_COOKIEJAR
将cookie存储到文件中,并使用CURLOPT_COOKIEFILE
从文件中检索它们。在使用cURL的CURLOPT_COOKIEFILE选项时处理多个请求
我在想什么,当多个用户同时访问脚本时会发生什么 - 不会搞乱cookie文件的内容吗?另外,如何管理Cookie文件,以便可以同时拥有多个用户?
我使用CURLOPT_COOKIEJAR
将cookie存储到文件中,并使用CURLOPT_COOKIEFILE
从文件中检索它们。在使用cURL的CURLOPT_COOKIEFILE选项时处理多个请求
我在想什么,当多个用户同时访问脚本时会发生什么 - 不会搞乱cookie文件的内容吗?另外,如何管理Cookie文件,以便可以同时拥有多个用户?
您需要为脚本的每次执行指定一个不同的文件,否则您将遇到文件被覆盖等问题,正如您所建议的那样。
您可能想看看tempnam(下面的示例)作为生成唯一文件的方法,或者仅使用uniqid等,并自行创建文件。
<?php
session_start();
$cookieFilePath = $_SESSION['cookiefilepath']
? $_SESSION['cookiefilepath']
: tempnam(sys_get_temp_dir(), session_id().'_cookie_');
$_SESSION['cookiefilepath'] = $cookieFilePath;
...
curl_setopt($curlSession, CURLOPT_COOKIEFILE, $cookieFilePath);
...
?>
也就是说,您需要确保在不再需要这些文件时删除这些文件。 (如果这不在脚本的生命周期内,则可能需要通过使用filemtime或类似的cron定期执行整理脚本。)
顺便提一下,您可以简单地提供文件的完整路径您想使用 - 尽管在现有的Can someone explain CURL cookie handling (PHP)?问题中说了什么,但它不必位于脚本所在的同一目录中。
多个请求会覆盖同一个文件(但可能会由于文件锁定而减慢所有其他请求的执行)。
您可以将session_id()
合并到Cookie文件名中,以便每个客户端会话都有一个Cookie文件。我还建议将文件存储在类似sys_get_temp_dir()
的文件中。
类似:
$cookieFile = sys_get_temp_dir().PATH_SEPARATOR.session_id().'-cookies.txt';
应该可以正常工作了点。
CURLOPT_COOKIEJAR
和CURLOPT_COOKIEFILE
只是用于在文件中处理cookie的实用程序,如Web浏览器。 并不建议您的情况。
但是你可以直接使用http头来设置和检索cookie。
有关设置你的cookies
<?php
curl_setopt($ch, CURLOPT_COOKIE, 'user=xxxxxxxx-xxxxxxxx');
?>
对于检索Cookie,只需确定startswith Set-Cookie:
页眉您可以检查此文件为了解Cookie要头工作http://curl.haxx.se/rfc/cookie_spec.html
使用示例,快速和脏,但绝对不标准。
有了这个头标
<?php
$header_blob = '
Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/
Set-Cookie: PART_NUMBER=RIDING_ROCKET_0023; path=/ammo
';
提取cookie头
$cookies = array();
if (preg_match_all('/Set-Cookie:\s*(?P<cookies>.+?);/i', $header_blob, $matches)) {
foreach ($matches['cookies'] as $cookie) {
$cookies[] = $cookie;
}
$cookies = array_unique($cookies);
}
var_dump($cookies);
重发饼干
$cookie_blob = implode('; ', $cookies);
var_dump($cookie_blob);
的[有人能解释卷曲cookie处理(PHP)?(HTTP
可能重复: //stackoverflow.com/questions/4105529/can-someone-explain-curl-cookie-handling-php) – 2011-01-26 15:02:08
如果答案在副本是正确的,它比糟糕的更糟:) – 2011-01-26 15:02:21
@Pekka你可以提供你想要使用的文件的完整路径。我会放下对其他问题的评论。 – 2011-01-26 15:15:30