Maison > développement back-end > tutoriel php > php 用curl模拟登陆后 如果多用户的话操作 如何保存他们登陆的cookies?不写文件的情况下

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

WBOY
Libérer: 2016-08-04 09:19:20
original
852 Les gens l'ont consulté

最近特发奇想想做个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>
Copier après la connexion
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal