php CURL-多个独立会话-需要帮助!

php CURL-多个独立会话-需要帮助!,php,session,cookies,curl,Php,Session,Cookies,Curl,这是我的困境。。。 我基本上有一个脚本,它通过向第三方网站发布CURL帖子来执行登录,然后根据登录会话发布另一篇帖子来更新用户详细信息。现在,由于我的网站越来越忙,我有多个用户在做同样的事情,似乎有时curl会感到困惑,并用不同的用户信息更新一个用户的详细信息。这造成了真正的问题。 用户在一次登录后使用的cookie似乎被其他用户共享,他们最终使用相同的cookie登录,这让第三方系统感到困惑。我的代码发布在下面,我需要使用cookiefile和cookiejar来维护php会话,以允许我做我需

这是我的困境。。。 我基本上有一个脚本,它通过向第三方网站发布CURL帖子来执行登录,然后根据登录会话发布另一篇帖子来更新用户详细信息。现在,由于我的网站越来越忙,我有多个用户在做同样的事情,似乎有时curl会感到困惑,并用不同的用户信息更新一个用户的详细信息。这造成了真正的问题。 用户在一次登录后使用的cookie似乎被其他用户共享,他们最终使用相同的cookie登录,这让第三方系统感到困惑。我的代码发布在下面,我需要使用cookiefile和cookiejar来维护php会话,以允许我做我需要做的事情。但似乎所有用户都在重复使用同一个cookie。。。。 这有意义吗?我能做些什么来改变这个吗?请告知。。。。 非常感谢

下面是我用来登录和发布用户更新的代码

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);

谢谢-将尝试一下!