2011-06-12 82 views
2

我喜歡用PHP來查看一個cookie PHPSID27258STATUS是否存在值COMPLETE如果是的話。PHP無法讀取cookie?

在谷歌瀏覽器(在選項)我可以看到這個cookie存在,並具有值COMPLETE

如果我運行這個PHP腳本,我得到'未設置'。我在這裏做錯了什麼?

$cookiename="PHPSID27258STATUS"; 
if (isset($_COOKIE[$cookiename]) && $_COOKIE[$cookiename] == "COMPLETE") 

--update
該Cookie是由 「limesurvey」 一個開源的平臺,調查組。雖然它可能不是最好的方法。我使用limesurvey在我正在構建的站點上進行小調查(iframe)。我希望在下次訪問時讓調查消失。 Limesurvey從相同的主機(本地主機現在)運行。並且位於該網站的子目錄中。

我猜想(但LS中有很多代碼),這是在投票/帖子完成後cookie的製作方式。

$cookiename="PHPSID".returnglobal('sid')."STATUS"; 
setcookie("$cookiename", "COMPLETE", time() + 31536000); //Cookie will expire in 365 days 
+4

當你'print_r($ _ COOKIE)'時,你會看到什麼?你如何設置cookie? Cookie是否設置爲您訪問該腳本的同一個域?請向我們展示'setcookie()'代碼 – 2011-06-12 12:31:58

回答

1

設置後無法立即訪問cookie。至少上次是這樣。確保你沒有這個問題。如果不是,可能是您在設置cookie時遇到問題,那麼請將該部分也發佈。

+0

當你可以訪問一個cookie時,你只需要提及**:在下一個請求中(在你設置了它之後)。 – 2011-06-12 12:36:52

2

您只能閱讀與閱讀腳本屬於同一個域的cookie。例如,如果Cookie x PHSID27258STATUS是由域xyz.com設置的,則無法使用abc.com上的腳本來讀取它。所以請確保您所需cookie的域名是相同的。同時向我們展示您設置Cookie的代碼部分。

編輯:

setcookie($cookiename, "COMPLETE", (time() + 31536000) , '/'); 
+0

該cookie由「limesurvey」設置,我將更新原始帖子。 – Rob 2011-06-12 12:51:52

+0

@Rob在這種情況下,你不能讀取除limesurvey以外的域的cookie – 2011-06-12 13:00:37

+0

我運行腳本的域是相同的(本地主機)只有limesurvey的路徑是不同的(從站點的子目錄)。在這種情況下,仍然無法讀取cookie? – Rob 2011-06-12 13:14:55

0

你提到該Cookie是由它自己的子目錄運行的程序設置。您沒有提及cookie本身是否設置在該子目錄中,但我懷疑這是您的問題所在。

如果一個cookie被設置爲一個路徑,那麼它將只能被該路徑中的頁面訪問。在PHP setcookie() manual page中描述了此行爲。

當您從子目錄中的頁面設置Cookie時,爲了使整個站點可以訪問cookie,需要使用可選path參數設置爲"/"調用setcookie()

您聲明Cookie正在由LimeSurvey設置。我不知道這個軟件,但你應該能夠查看源代碼,並在設置cookie時查看它是否使用path參數。如果不是,你最好的選擇是修改它,以便它。然後這個cookie將被整個網站訪問。 (如果LineSurvey開發人員選擇不爲整個站點設置它,這將是可以理解的,因爲它可以讓軟件作爲一個更獨立的實體運行於站點上的任何其他站點)。

1

嘗試使用此代碼設置cookie:

setcookie("cookiename", "cookievalue", time() + 31536000, "/"); 

這使得可用於整個域的餅乾,我最近遇到了同樣的問題,當我嘗試這樣做,它使人們的工作,原因是,您的瀏覽器爲domain.com和www.domain存儲Cookie。com,所以你永遠不知道你的設置和獲取方式,即使你沒有這個問題,設置域也是很好的做法。