CURL不使用文件存取COOKIE

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數據

相關文章
相關標籤/搜索