[英]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.