簡體   English   中英

php CURL - 多個獨立會話 - 需要幫助!

[英]php CURL - multiple independent sessions - need help!

這是我的困境......我基本上有一個腳本,通過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罐。

您需要為每個用戶使用不同的cookie文件。

我假設你的postFields包含每個用戶的一些唯一標識符(如用戶ID或用戶名),所以請嘗試以下方法:

$cookie_file = 'cookies_' . $postFields['user_id'] . '.txt';
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);

據我了解這個問題,你的腳本收到了錯誤的用戶信息。 你如何存儲用戶信息?

我會說這是問題的根源 - 你沒有為用戶信息分配一個唯一的標識符,而這就是令人討厭的地方;)

所以,首先,我將會話ID與用戶信息相關聯(或者說,在會話中存儲用戶信息,這對每個人來說都是唯一的),並從那里加載它。 我猜它應該做的伎倆;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM