php CURL-多个独立会话-需要帮助!
这是我的困境。。。 我基本上有一个脚本,它通过向第三方网站发布CURL帖子来执行登录,然后根据登录会话发布另一篇帖子来更新用户详细信息。现在,由于我的网站越来越忙,我有多个用户在做同样的事情,似乎有时curl会感到困惑,并用不同的用户信息更新一个用户的详细信息。这造成了真正的问题。 用户在一次登录后使用的cookie似乎被其他用户共享,他们最终使用相同的cookie登录,这让第三方系统感到困惑。我的代码发布在下面,我需要使用cookiefile和cookiejar来维护php会话,以允许我做我需要做的事情。但似乎所有用户都在重复使用同一个cookie。。。。 这有意义吗?我能做些什么来改变这个吗?请告知。。。。 非常感谢 下面是我用来登录和发布用户更新的代码php CURL-多个独立会话-需要帮助!,php,session,cookies,curl,Php,Session,Cookies,Curl,这是我的困境。。。 我基本上有一个脚本,它通过向第三方网站发布CURL帖子来执行登录,然后根据登录会话发布另一篇帖子来更新用户详细信息。现在,由于我的网站越来越忙,我有多个用户在做同样的事情,似乎有时curl会感到困惑,并用不同的用户信息更新一个用户的详细信息。这造成了真正的问题。 用户在一次登录后使用的cookie似乎被其他用户共享,他们最终使用相同的cookie登录,这让第三方系统感到困惑。我的代码发布在下面,我需要使用cookiefile和cookiejar来维护php会话,以允许我做我需
function hitForm($postURL, $postFields, $referer="", $showerr = FALSE, $ispost = TRUE) {
global $islocal, $path_escape;
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($ch, CURLOPT_URL, $postURL);
if ($ispost)
curl_setopt($ch, CURLOPT_POST, 1);
else
curl_setopt($ch, CURLOPT_HTTPGET, 1);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$ret = curl_exec($ch);
if ($error = curl_error($ch)) {
if ($showerr)
echo 'ERROR: ' . $error;
return -1;
exit;
}
$CU_header = curl_getinfo($ch);
$CU_header["err"] = curl_errno($ch);
$CU_header["errmsg"] = curl_error($ch);
curl_close($ch);
$returnout = $ret;
//for debugging purposes for now we are logging all form posts
SaveLog("hitform", "F[".$this->curruserid." - ".$this->currfunc." - ".date("d-m-y h:i:s")."]".$postFields);
return $ret;
}
每个会话都使用相同的cookies.txt文件,因此共享cookie问题就来自于此。您需要为要运行的每个并行会话指定一个单独的文件。您正在为所有用户使用一个共享cookie jar。每个用户都需要一个单独的cookie罐。据我所知,您的脚本获取了错误的用户信息。您如何存储用户信息 我认为这就是问题的根源——您没有为用户信息分配唯一标识符,这就是问题的症结所在;)
所以,首先,我要将会话id与用户信息相关联(或者说,将用户信息存储在会话中,这对每个人来说都是唯一的),然后从那里加载它。我想它应该会起作用;) 您需要为每个用户使用不同的cookie文件 我假设您的postFields包含每个用户的一些唯一标识符(如用户id或用户名),请尝试以下操作:
$cookie_file = 'cookies_' . $postFields['user_id'] . '.txt';
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
谢谢-将尝试一下!