2010-08-25 59 views
5

有兩個結構域: a.example.com example.com我只能從二級域名獲取cookie嗎?

example.coma.example.com的父域。現在這兩個a.example.comexample.com可能會寫一個名爲的cookie test_cookie。現在我們有一頁a.example.com這將使用javascript來讀取cookie的值test_cookie。有沒有一種方法只讀取域中設置的cookie a.example.com而不是example.com


也許我的問題是有點不清楚,

我要實現的目標是:1。 我想寫一個名爲readCookie函數讀取與名test_cookie餅乾其中: a。當存在一個cookie:下域example.com和下域a.example.com NO餅乾test_cookietest_cookie,readCookie返回null 灣當存在一個cookie:下域test_cookieexample.com並且也是餅乾test_cookie下域a.example.com,readCookie返回下域a.example.com c中的Cookie值。當存在沒有Cookie:test_cookieexampler.com,但有一個cookie test_cookie下域a.example.com,readCookie返回下域a.example.com Cookie值。

回答

3

無法將cookie限制爲example.com,只能設置domain參數。但是,在大多數瀏覽器中,如果沒有提供domain,Cookie將默認爲example.com。不幸的是,在IE中它默認允許子域訪問cookie。

這就是爲什麼你把你的主要網站在www.example.com而不僅僅是example.com。在主域名爲example.com的站點上,您無法可靠地保持您的Cookie分離。

9

這取決於該cookie是如何定義的,特別是如果屬性指定什麼值,它(見RFC 2965 – User Agent Role):

  • 如果屬性丟失,用戶代理假設當前主機;否則
  • 如果屬性設置,其值必須以..example.com啓動(如果沒有,例如example.com,它將獲得由用戶代理改變爲.example.com)。

現在,Cookie的域名必須是domain-match要在請求中發送的域名。並且是這樣的話:

  • 如果任一結構域是相同的(在情況下參數缺失),或者
  • 如果在屬性指定的值必須是一個後綴域。

這意味着:

effective domain | example.com | a.example.com | foo.example.com | bar.a.example.com 
------------------+-------------+---------------+-----------------+------------------- 
     example.com |  ✓  |  ✗  |  ✗  |   ✗ 
    a.example.com |  ✗  |  ✓  |  ✗  |   ✗ 
    .example.com |  ✓  |  ✓  |  ✓  |   ✓ 
    .a.example.com |  ✗  |  ✓  |  ✗  |   ✓ 

所以,如果你想有一個cookie來只爲a.example.com是有效的,你要麼省略屬性或您指定的屬性與.a.example.com(這將使cookie有效的a.example.com以及其子域)。