cookie設置域名問題,cookie跨域




今天研究一天發現cookie無法設置除當前域名或者其父域名之外的其他domain.

這個是瀏覽器出於對cookie的保護造成的,也就是cookie無法跨域設置。

對於子域名也有如下規則,當前域名只能設置當前域名以及他的父域名,不能設置子域名

如在www.wo.cao.baidu.com  域名下只能設置 cao.baidu.com,baidu.com

不能設置 da.jia.wo.cao.baidu.com的cookie。

 

一篇文章還不錯,摘錄下來

 

當我們給網站設置cookie時,大家有沒有發現在網站的其他域名下也接收到了這些cookie。這些沒用的cookie看似不占多少流量,但如果對一個日PV千萬的站點來說,那浪費的資源就不是一點點了。因此在設置cookie時,對它的作用域一定要設置准確了。

我們都知道在PHP中用setcookie 來設置網站的cookie,該函數的用法如下:
bool setcookie ( string $name [, string $value [, int$expire = 0 [, string$path [, string $domain [, bool$secure = false [, bool$httponly = false ]]]]]] )
 

今天我們就來探討一下它的第五個參數$domain,因為它決定了cookie的作用域。

現在有如下3個域名,一個頂級域名、一個二級域名和一個三級域名:

① zydya.com
②blog.zyday.com
③one.blog.zyday.com

    首先在①zyday.com域名下設置cookie,做四次測試,分別設置domain參數為空、'zyday.com'、'blog.zyday.com'與'one.blog.zyday.com'。
    √表示該域名下能取到cookie,×表示不能取到cookie

domain參數     zydya.com     blog.zyday.com     one.blog.zyday.com
setcookie('name',1,time()+1)      √      √      √
setcookie('name',1,time()+1,'/','zyday.com')      √      √      √
setcookie('name',1,time()
+1,'/','blog.zyday.com')      ×      ×      ×
setcookie('name',1,time()
+1,'/','one.blog.zyday.com')     ×     ×     ×

當domain設置為空時,domain默認為當前域名,並且該域名下的子域名都可以接收到cookie。
但是domain參數設置其子域名時,所有域名就接收不到了,包括那個子域名。

    然后在②blog.zyday.com域名下設置cookie,測試條件同上

domain參數     zydya.com     blog.zyday.com     one.blog.zyday.com
setcookie('name',1,time()
+1)     ×     √     √
setcookie('name',1,time()+1,'/','zyday.com')     √     √     √
setcookie('name',1,time()+1,'/','blog.zyday.com')     ×     √     √
setcookie('name',1,time()+1,'/',one.blog.zyday.com')     ×     ×     ×

看第二行,domain參數是zyday.com,是blog.zyday.com的父域名,那么zyday.com下所有子域名(包括zyday.com、blog.zyday.com、one.blog.zyday.com)都能接收到cookie。
當domain為自身域名時,那么其父域名受影響,其本身與其子域名可以接收到cookie。
而設置其子域名或其他域名時,所有域名都接收不到cookie了。

    最后在③one.blog.zyday.com域名下設置cookie

domain參數     zydya.com     blog.zyday.com     one.blog.zyday.com
setcookie('name',1,time()
+1)     ×     ×     √
setcookie('name',1,time()+1,'/','zyday.com')     √     √     √
setcookie('name',1,time()+1,'/','blog.zyday.com')     ×     √     √
setcookie('name',1,time()+1,'/',one.blog.zyday.com')     ×     ×     √

第三個測試得出的結論在上面已經總結了。再看一遍,這里就不多解釋了。

domain的設置,有兩點要注意:

1.在setcookie中省略domain參數,那么domain默認為當前域名。

2.domain參數可以設置父域名以及自身,但不能設置其它域名,包括子域名,否則cookie不起作用。

那么cookie的作用域:

cookie的作用域是domain本身以及domain下的所有子域名。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM