2012-04-23 65 views
10

我想明白卷曲的四個選項餅乾:捲曲 - cookie和session

CURLOPT_COOKIESESSION 
CURLOPT_COOKIEFILE 
CURLOPT_COOKIEJAR 
CURLOPT_COOKIE 

我明白COOKIEJAR是爲寫入cookie,並COOKIEFILE是爲閱讀。 那麼什麼是COOKIESESSIONCURLOPT_COOKIE是自定義的,但是我可以使用它來維護與服務器的會話嗎?

+1

是不是第二和第四個相同? – Pheonix 2012-04-23 22:41:34

回答

19

要了解CURLOPT_COOKIESESSION,您需要了解一些關於cookie的內容。 Cookies有發佈cookie的網站設置的截止日期。如果cookie的截止日期已過,瀏覽器/客戶端將不會發送它,並且客戶端將刪除它。如果Cookie設置爲NO過期日期,則瀏覽器應該使用該cookie,直到瀏覽器會話關閉,或者用戶註銷並且cookie未被設置。

也就是說,CURLOPT_COOKIESESSION是一種讓cURL模擬關閉瀏覽器的方法。如果COOKIEFILE中有一些會話cookie(沒有到期的cookie),它通常會在文件中存在這些cookie。如果您設置了CURLOPT_COOKIESESSION,那麼它不會發送任何沒有到期日期的cookie。

CURLOPT_COOKIE只是給你一個設置將以原始格式發送到服務器的cookie數據的方法。如果你有一個你想發送的原始HTTP cookie,這很有用。如果沒有這個選項,你必須將這些cookie加入COOKIEFILE,或者使用原始值設置一個自定義HTTP標頭Cookie:

+0

我需要使用兩個需要共享相同會話cookie的獨立腳本。所以我想**(1)**開始一個新的會話與服務器,**(2)**維持幾個頁面的會話(init,set,exec,close),**(3)**關閉腳本。 **(4)**打開新腳本,**(5)**恢復同一會話,**(6)**並關閉並刪除Cookie。所以我應該首先使用COOKIESESSION = TRUE,COOKIEJAR = cookiefilename和COOKIEFILE = cookiefilename。 COOKIESESSION = FALSE,COOKIEFILE =腳本1的cookiefilename,只需在腳本2中繼續而不需要COOOKIESESSION = TRUE? – Ted 2012-04-23 23:06:43

+0

這取決於登錄cookie是否實際上是會話cookie或持久性cookie。如果是後者,比COOKIESESSION無濟於事。爲了安全起見,您可以在腳本1中開始之前清除cookie文件的內容。或者,您可以通過點擊註銷url使腳本2實際註銷相關站點。我認爲在腳本1和腳本2中,我都會指定COOKIEFILE和COOKIEJAR,這樣如果script2發出請求時,對cookie的任何修改都會保存到文件中。 COOKIESESSION也默認爲false。 – drew010 2012-04-23 23:12:03

+0

他們是順序的。腳本2完成後,我使用unlink刪除cookie文件。我想我可以告訴它這是一個會話cookie由此:PHPSESSID。就這樣。我之前說過一個評論,(COOKIESESSION =第一個爲真,其餘爲假)是否爲真? – Ted 2012-04-23 23:18:21