2011-12-27 143 views
5

我想通過PHP設置cookie。該方案是這樣的:如何在PHP中爲域設置Cookie

域名:example.com

上有子域中的一個網頁(my.example.com)。我的代碼是:

$value="I am looged in"; 
setcookie("TestCookie", $value,'','',".example.com"); 
echo "hello".$_COOKIE["TestCookie"]; 

但結果只是「你好」 - cookie沒有設置。請建議可能的解決方案。

謝謝!

+0

這個在使用時有效:setcookie(「TestCookie」,$ value); – Yogesh 2011-12-27 12:56:06

+0

爲了更容易的cookie管理,尤其是關於「域」屬性,你可以使用這個:https://github.com/delight-im/PHP-Cookie – caw 2016-07-12 23:27:29

+0

你可能會發現['$ cookie-> setDomain($ domain )'](https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php#L117)有幫助,在[這個獨立的庫](https://github.com)中找到/喜悅-IM/PHP-餅乾)。 – caw 2016-09-21 04:33:09

回答

9

對實際調用setcookie的前兩個更正:參數3(expired)應該是一個整數值(默認值爲0);參數4應設置爲'/'以使cookie對所有子目錄有效;因此setcookie通話應該是這樣的:

setcookie("TestCookie", $value, 0, '/', ".example.com"); 

那麼就應該實際工作第二次調用腳本。要理解爲什麼它第一次不能正常工作,我們必須挖掘一點into how cookies work;基本上,Cookies是從服務器發送到客戶端的數據,服務器在此表示「在下次向我發送請求時向我發送此數據」。這基本上就是setcookie的用途:當請求完成並且客戶端已經接收並處理了頁面時,指定的cookie將在客戶端創建;另一方面,$_COOKIE保留所有值,其中已經在Cookie中已經是,並且已經由客戶端與請求一起發送 - 意味着第一次調用腳本時,$ _SESSION實際上仍然是空的,因爲只有在客戶端收到腳本輸出後纔會創建cookie。

+0

非常感謝你解釋的東西!這對我有用。 – Yogesh 2011-12-27 13:12:24