2009-09-13 67 views
10

有沒有什麼辦法可以在子域名上設置可讀的而不是?換句話說,請在domain.com上提供Cookie,但是而不是www.domain.comxyz.domain.comPHP的setcookie()爲域名,但不是子域名

//this is what i'm "intending"... 
setcookie($name,$value,$expires,'/','domain.com'); 
//however, this is how it behaves: 
setcookie($name,$value,$expires,'/','.domain.com'); 

的理由:我在上一個子域建立一個靜態CDN,不希望用戶會話cookie來回回的每個圖像,css文件,js文件等

...我是否必須退回到爲我的網站使用www.domain.com?有沒有解決方法?

+0

將域設置爲null是唯一正確的事情。否則,你可能會發現['$ 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 02:13:19

回答

17

顯然,在「domain.com」上有一個匹配「* .domain.com」的cookie是預期的行爲。

例如:PERSISTENT CLIENT STATE HTTP COOKIES狀態(一些重點煤礦)

domain=DOMAIN_NAME

當搜索 有效的餅乾,該餅乾的 域屬性的比較的Cookie列表是 ,因特網域名爲 ,主機從中獲取的URL爲 。 ...
「尾部匹配」表示 該域屬性匹配 而不是主機完整 限定域名的尾部。 A 「acme.com」的域屬性 與主機名「anvil.acme.com」匹配爲 以及「shipping.crate.acme.com」。指定的域 內

只有主機可以設置cookie爲域和 域必須具有至少兩(2) 或三(3)週期在他們 防止形式的結構域:」。 com「, 」.edu「和」va.us「。 在下面列出的七個特殊 頂級域之一中僅失敗的任何域僅需要 需要兩個時段。任何其他域名 至少需要三個。 「COM」, 「EDU」,「NET」,「ORG」,「GOV」,「MIL」和 「INT」這7個 特殊頂級域名。

所以,你要麼必須:

  • 使用 「www.domain.com」 爲您的網站
  • 或您的靜態內容(如 「.anotherdomain.com」) 使用一個完全不同的域名
    • 例如,這是在stackoverflow上完成:靜態內容由sstatic提供。淨
+0

很好的解釋,這裏也是+1。 – Thiyagaraj 2009-09-13 15:27:15

+0

哇,很好的信息。在挖掘時我沒有跑過去。謝啦。我想這回答了我的問題... www.domain.com它是。 – brianreavis 2009-09-13 15:29:57

+0

不客氣:-)玩得開心! (如果使用www.domain.com作爲您的網站和cookies,不要忘記確保「domain.com」在訪問您的網站時重定向到「www.domain.com」 - 不要這取決於瀏覽器自動執行的操作:它並不總是有效的 - 在代理服務器後面不起作用,例如有時候(這是我工作的情況,這很痛苦)) – 2009-09-13 15:38:59

6

這就是爲什麼不少網站(包括這一家)註冊專用域作爲CDN使用的原因。

1

爲Cookie域是tail matched對域名這是不可能的。你將不得不使用www。