最近特發奇想想做個curl的網頁應用,多使用者操作的話,在不把cookies寫到檔案中的需求下,如何儲存他們登陸的cookies和擷取他們的cookies進行下一步的curl操作?
我想過以下方案:
儲存到memcache中,用sessionid作為memcache的key,(不知這方案可行不)
回複內容:
最近特發奇想想做個curl的網頁應用,多使用者操作的話,在不把cookies寫到檔案中的需求下,如何儲存他們登陸的cookies和擷取他們的cookies進行下一步的curl操作?
我想過以下方案:
儲存到memcache中,用sessionid作為memcache的key,(不知這方案可行不)
猜你是因為類比登陸後,無法儲存使用者的工作階段狀態.其實有兩種解決方案.一是將其儲存在檔案中.這樣會執行兩次的IO操作,對效能要求不是特別好.二是將其cookie值儲存在session或者是其他的快取中.但是要求就是原網站的response返回的回應標頭必須要有set-cookie這項.話不多說,直接上一串代碼.
function curlFetch($url, $data = null ,$referer = ""){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回字串,而非直接輸出 curl_setopt($ch, CURLOPT_HEADER, 1); // 返回header部分 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // 設定socket連線逾時時間 if (!empty($referer)) { curl_setopt($ch, CURLOPT_REFERER, $referer); // 設定引用網址 } $cookie_str=session('servlet'); if(!empty($cookie_str)){ curl_setopt($ch, CURLOPT_COOKIE , $cookie_str); } if (is_null($data)) { // GET } else if (is_string($data)) { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // POST } else if (is_array($data)) { // POST curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); } set_time_limit(120); // 設定自己伺服器逾時時間 $str = curl_exec($ch); curl_close($ch); list($header, $body) = explode("\r\n\r\n", $str); // 解析COOKIE preg_match("/Set-Cookie:(.*);/iU", $header, $matches); if(!empty($matches) && empty($cookie_str)){ $cookies=$matches[1]; //這裡是你需要儲存cookie session('servlet',$cookies); //我這裡將其儲存在session中 } return $body; //頁面所得到的資料}