總結一下頂級域名和子級域名之間的cookie共享和相互修改、刪除

最近項目中恰好涉及到了主域名和子域名之間的共享和相互修改、刪除,也就藉此機會總結一下經常使用的幾個場景,這裏代碼以PHP爲例來講明,域名的話就拿頂級域名和二級域名爲例,其餘的場景都是相似哈!瀏覽器

設置COOKIE

頂級域名

頂級域名只能設置domain爲頂級域名,不能設置爲二級域名或者三級域名等等,不然cookie沒法生成。cookie

yangbai.com能設置domainyangbai.com或者www.yangbai.com,但不能設置domainlogin.yangbai.com,這樣cookie不會生成。dom

如下面的代碼爲例:spa

setcookie("name1", "yangbai", time() + 1000);//yangbai.com本身能夠看到
setcookie("name2", "yangbai", time() + 1000, "/", "www.yangbai.com");//*.www.yangbai.com均可以看到
setcookie("name3", "yangbai", time() + 1000, "/", "yangbai.com");//*.yangbai.com均可以看到
setcookie("name4", "yangbai", time() + 1000, "/", "login.youzan.com");//設置無效

設置domain的時候,.yangbai.comyangbai.com是同樣的。
未指定domain時,默認的domain爲用哪一個域名訪問就是哪一個。code

執行後,www.yangbai.com在瀏覽器的cookie狀況以下圖:blog

圖片描述

二級域名login.yangbai.comgame.yangbai.com瀏覽器的cookie狀況以下圖:圖片

clipboard.png

總的來講,頂級域名設置的cookie能夠共享【須要指定domain主域名的host】給二級域名,也能夠本身私有【不指定domain】。ip

二級域名

game.yangbai.com爲例,代碼以下:域名

setcookie("game", "yangbai");//只有本身能夠看到
setcookie("game1", "yangbai", time() + 1000, "/", "yangbai.com");//*.yangbai.com均可以看到
setcookie("game2", "yangbai", time() + 1000, "/", "chip.game.yangbai.com");//設置無效

執行後,game.yangbai.com在瀏覽器的cookie狀況以下圖:it

圖片描述

總的來講,設置cookie的話只能在本域名下或者domain級別高於自身的域名下才會生效!

讀取COOKIE

有了上面的例子和實踐,大概的規則以下:

  • 二級域名能讀取設置了domain爲頂級域名或者自身的cookie,不能讀取其餘二級域名domaincookie。例如:要想cookie在多個二級域名中共享,須要設置domain爲頂級域名,這樣就能夠在全部二級域名裏面或者到這個cookie的值了。

  • 頂級域名只能獲取到domain設置爲頂級域名的cookiedomain設置爲其餘子級域名的沒法獲取。

修改COOKIE

頂級域名

頂級域名的cookie在頂級域名或者非頂級域名【須要設置domain爲頂級域名才能夠】均可以修改。代碼以下:

#爲全部二級域名設置一個cookie
setcookie("name", "yangbai", time() + 1000, "/", "yangbai.com");

#在game.yangbai.com下面修改這個cookie值
setcookie("name", "yangbai11", time() + 1000, "/", "yangbai.com");

二級域名

修改二級域名自身生成的cookie不須要設置domain,直接設置便可。代碼以下:

#修改game.yangbai.com下面自身的cookie值
setcookie("game", "chip", time() + 10000);

刪除COOKIE

刪除cookie理解爲是修改cookie的一種特殊場景,只需將expire設置爲過時、值設置爲null便可,代碼以下:

#刪除yangbai.com下面的cookie值
setcookie("name", null, time() - 1000, "/", "yangbai.com");

#刪除game.yangbai.com下面自身的cookie值
setcookie("game", null, time() - 1000);

最後,但願這些簡單地總結能夠幫到你,你們加油!

相關文章
相關標籤/搜索