2010-07-06 36 views
6

我有一個cookie用在我的應用上。它看起來像這樣:PHP cookie在不正確的域上寫入

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | bar | my.domain.tld   |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

在我的腳本的一部分,基於一些條件,我試圖改變一個cookie的值。我使用此代碼:

// overwrite cookie 
if($condition){ 
    setcookie("foo", "cat", 0, "/", "my.domain.tld"); 
} 

之後,我的cookie數據是這樣的:

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | bar | my.domain.tld   |/ | Session | 
| foo | cat | .my.domain.tld  |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

爲什麼一個.被預先考慮到域?我想覆蓋現有的cookie。

+0

沒有任何意義,它*必須*設置爲anything.domain.tld否則在某處有一個大錯誤 - 我敢建議的唯一的事情是您再次檢查並確保第一個cookie實際上不是事實設置爲.anything而不是第二個.. – nathan 2010-07-06 19:46:30

+0

Nathan,它看起來不是一個錯誤,因爲它可能是混淆的常見來源。看到下面的答案:) – 2010-07-06 19:53:44

+0

你可能會發現['$ cookie-> setDomain($ domain)'](https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php# L117)很有幫助,在[這個獨立的庫](https://github.com/delight-im/PHP-Cookie)中找到。它負責規範您提供的域名。 – caw 2016-09-21 04:23:08

回答

0

事實證明,不指定任何域似乎工作:

setcookie("foo", "cat", 0, "/"); 

預計cookie數據:

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | cat | my.domain.tld   |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

奇怪,但它的作品。

0

從文檔:

該cookie可用的域。爲了讓cookie在example.com的所有子域上都可用,您可以將其設置爲「.example.com」。這個。不是必需的,但可以與更多的瀏覽器兼容。將其設置爲www.example.com將使cookie僅在www子域中可用。有關詳細信息,請參閱»規格中的尾部匹配。

和尾匹配規格是在這裏:

http://curl.haxx.se/rfc/cookie_spec.html

+0

我應該更具體。通過「任何」我的意思是子域可以是任何東西。我不想將答案縮小到「www」特定子域。更確切地說,我不希望cookie匹配域的所有*子域名。我更新了我的問題。 – 2010-07-06 19:51:10