2010-05-02 83 views
0

我不確定我是否正確地問這個問題。cURL影響PHP中的Cookie檢索?

我有兩個PHP頁面位於同一臺服務器上。第一個PHP頁面設置一個到期的cookie,第二個檢查cookie是否被設置。如果已設置,則返回「開」。如果未設置,則返回「關閉」。

如果我只是運行的頁面,如
「www.example.com/set_cookie.php」

「www.example.com/is_cookie_set.php」
我得到一個 「上的」 從is_cookie_set .PHP。

繼承人問題,在set_cookie.php文件我有一個叫做is_set的函數。該函數執行以下cURL並返回內容(「on」或「off」)。不幸的是,內容總是返回「關閉」。不過,如果我手動檢查文件(「www.example.com/is_cookie_set.php」),我可以看到cookie已設置。

繼承人的功能:

<?php 
function is_set() 
{ 
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, 'http://example.com/is_cookie_set.php'); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$contents = curl_exec ($ch); 

curl_close ($ch); 

echo $contents; 
} 
?> 

請注意,我沒有使用捲曲獲取或設置餅乾,只檢查檢查,如果cookie中設定的頁面。

我查看了CURLOPT_COOKIEJAR和CURLOPT_COOKIEFILE,但我相信這些是通過cURL設置cookie,我不想這樣做。

回答

0

我相信你在製造混亂。當你使用curl的時候,PHP會面臨像客戶端(比如瀏覽器)的麻煩,並且爲你提出這個請求。也就是說,curl所檢查的cookie與當前瀏覽器中的cookie無關。我認爲。

0

我不完全確定你在這裏要做什麼,但你知道,因爲nc3b已經說明,在你的is_set()函數中,PHP充當客戶端而不是你的瀏覽器,對嗎?這意味着你的cookie測試總是失敗(=沒有cookie返回)。

Cookie由客戶端存儲,並與每個請求一起發送到服務器。

如果你想知道PHP是否設置了cookie - 當然,你需要與cookie相同 - 你可以使用普通的if (isset($_COOKIE["cookiename"]))

也許你正在嘗試構建一個解決方案來查詢遠程主機上的cookie。對於這一點,看到這個SO問題:

0

捲曲就像你的瀏覽器作爲HTTP客戶端。 如果配置它們都可以接收和存儲cookie,但它們無關。

Curl不使用瀏覽器cookie。如果你想使用你的瀏覽器cookies,你必須使用--cookie選項開關。有關詳細信息,請參見手冊頁:http://curl.haxx.se/docs/manpage.html
例如,Firefox將它們存儲在名爲cookies.txt的文件中。 在linux下它位於〜/ .mozilla/firefox/$ profilefolder/cookies下。txt

提示:如果您使用Firefox> = 3.0,則Cookie存儲在sqlite數據庫中。如果你想用curl來使用它們,你必須自己提取一個cookies.txt文件。 這裏有一些例子,說明如何做到這一點: