2014-04-02 60 views
1

據我瞭解,curl使用cookiefile參數來讀取cookie,並在curl會話完成後使用cookiejar來保存它們。

使用此的典型示例表示必須使用文件,但我不想手動清理這些剩餘位。 例如,如果我使用tempnam將cookiejar設置爲一個文件,我將不可避免地最終得到一個完整的cookiejars目錄,我需要清理它。

如果用戶正確註銷,我當然可以刪除這個臨時文件,但我指望大多數用戶剛剛關閉瀏覽器窗口和會話(最終)過期,讓我無法自動刪除cookie jar。

到目前爲止,我的最佳想法是將cookiejar打入臨時文件夾,將其讀入會話變量,然後在每次使用curl時刪除cookiejar文件。

以前的用戶的實現是通過解析標題信息來消除cookiejar,但是這更多地涉及到我想獲得的信息。

回答

1

決定去臨時文件環繞方法。假設你的捲曲處理程序被命名爲$ C:

//Put down the cookieJar 
$cookieJar = tempnam(sys_get_temp_dir(),"cookie-"); 
if (isset($_SESSION['c_Cookies'])) file_put_contents($cookieJar, $_SESSION['c_Cookies']); 

curl_setopt($c, CURLOPT_COOKIEJAR, $cookieJar); 
curl_setopt($c, CURLOPT_COOKIEFILE, $cookieJar); 

,並在腳本的末尾:

//Always destroy curl, just in case... 
curl_close ($c); 
unset($c); 
//And pickup the cookieJar 
$_SESSION['c_Cookies'] = file_get_contents($cookieJar); 
unlink($cookieJar); 

這當然假定系統臨時目錄是誰在運行PHP寫的。它應該確保cookiejar總是在腳本的末尾被刪除,只要腳本不會過早終止。

1

而不是解析他們,你可以傳遞你的客戶端和其他服務器之間的標頭。只記得在set-cookie的情況下添加一個正則表達式替換「domain = [^;] +」部分。

+0

這是一個有趣的想法,只要反映的服務器不關心從我的服務器傳遞的外部cookie。我會嘗試看看! – Tsaukpaetra