CURL是一個很是實用的PHP擴展,模擬用戶登陸時常常須要存取COOKIE信息,而使用COOKIEJAR和COOKIEFILE會產生兩次貨兩次以上的I/O操做,性能效率自沒必要說,在第三方雲平臺(BAE SAE等),有時還須要操做STORAGE來實現存取COOKIE,比較麻煩,今天介紹一個CURL不使用文件存取COOKIE的方法: 服務器
COOKIEJAR/COOKIEFILE方式: cookie
/*-----保存COOKIE-----*/ 併發
$url = 'www.xxx.com'; //url地址 curl
$post = "id=user&pwd=123456"; //POST數據 post
$cookie = tempnam('./', 'cookie'); //cookie臨時文件 性能
$ch = curl_init($url); //初始化 url
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //返回獲取的輸出文本流 it
curl_setopt($ch,CURLOPT_POSTFIELDS, $post); //發送POST數據 效率
curl_setopt($ch,CURLOPT_COOKIEJAR, $cookie); //保存得到的cookie 登錄
culr_exec($ch); //執行curl
curl_close($ch); // 關閉curl
/*-----使用COOKIE-----*/
curl_setpost($ch, CURLOPT_COOKIEFILE, $cookie);
新方式(無I/O操做):
/*-----保存COOKIE-----/
$url = 'www.xxx.com'; //url地址
$post = "id=user&pwd=123456"; //POST數據
$cookie = tempnam('./','cookie'); //cookie臨時文件
$ch = curl_init($url) ; //初始化
curl_setopt($ch, CURLOPT_HEADER, 1); //將頭文件的信息做爲數據流輸出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回獲取的輸出文本流
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //發送POST數據
$content = curl_exec($ch); //執行curl並賦值給$content
preg_match('/Set-Cookie:(.*);/iU', $content, $str); //正則匹配
$cookie = $str[1]; //獲取COOKIE(SESSIONID)
curl_close($ch); //關閉curl
/*-----使用COOKIE-----*/
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
原理:正則獲取頭文件信息總的SESSIONID,熟悉SESSION和COOKIE的同窗應該知道,SESSION保存哎服務器端併發給本地一個COOKIE憑證(SESSION),憑SESSIONID便可讀取到SESSION數據