首頁  >  文章  >  後端開發  >  php 用curl模擬登陸後 如果多用戶的話操作 如何保存他們登陸的cookies?不寫文件的情況下

php 用curl模擬登陸後 如果多用戶的話操作 如何保存他們登陸的cookies?不寫文件的情況下

WBOY
WBOY原創
2016-08-04 09:19:20785瀏覽

最近特發奇想做個curl的網頁應用,多用戶操作的話,在不把cookies寫到文件中的需求下,如何保存他們登陸的cookies和獲取他們的cookies進行下一步的curl操作?
我想過以下方案:
保存到memcache中,用sessionid作為memcache的key,(不知這方案可行不)

回覆內容:

最近特發奇想做個curl的網頁應用,多用戶操作的話,在不把cookies寫到文件中的需求下,如何保存他們登陸的cookies和獲取他們的cookies進行下一步的curl操作?
我想過以下方案:
保存到memcache中,用sessionid作為memcache的key,(不知這方案可行不)

猜你是因為模擬登陸後,無法保存用戶的會話狀態.其實有兩種解決方案.一是將其保存在文件中.這樣會執行兩次的IO操作,對性能要求不是特別好.二是將其cookie值保存在session或是其他的高速緩存中.但是要求就是原網站的response返回的響應頭必須要有set-cookie這項.話不多說,直接上一串代碼.

<code>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;    //页面所得到的数据
}</code>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn