php 用curl模拟登陆后 如果多用户的话操作 如何保存他们登陆的cookies?不写文件的情况下

WBOY
发布: 2016-08-04 09:19:20
原创
833 人浏览过

最近特发奇想想做个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>
登录后复制
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板