当前位置:Gxlcms > PHP教程 > php用curl模拟登陆后如果多用户的话操作如何保存他们登陆的cookies?不写文件的情况下

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

时间:2021-07-01 10:21:17 帮助过:7人阅读

最近特发奇想想做个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; //页面所得到的数据 }

人气教程排行