瀏覽器cookie域如何工做?

因爲我遇到的奇怪的域/子域Cookie問題,我想知道瀏覽器如何處理Cookie。 若是他們以不一樣的方式來作,那麼瞭解它們之間的差別也將是一件很高興的事情。 javascript

換句話說-當瀏覽器收到一個cookie時,該cookie可能有一個域和一個附加的路徑。 是否能夠,在這種狀況下,瀏覽器可能會用一些默認值替代它們。 問題1:它們是什麼? html

稍後,當瀏覽器即將發出請求時,它會檢查其cookie並過濾掉應爲該請求發送的cookie。 它經過將它們與請求路徑和域進行匹配來實現。 問題2:有哪些匹配規則? java


添加:

我問這個的緣由是由於我對一些極端狀況感興趣。 喜歡: web

  • .example.com的cookie是否可用於www.example.com
  • .example.com的cookie是否可用於example.com
  • www.example.com是否可使用example.com的cookie?
  • 例如example.com的cookie是否可用於anotherexample.com
  • www.example.com能夠爲example.com設置cookie嗎?
  • www.example.com可以爲www2.example.com設置cookie嗎?
  • www.example.com可以爲.com設置cookie嗎?
  • 等等。

新增2: 瀏覽器

另外,有人能夠建議我應該如何設置Cookie,以便: 服務器

  • 能夠經過www.example.comexample.com進行設置;
  • 能夠經過www.example.comexample.com訪問。

#1樓

有關普遍的內容,請查閱RFC2965的內容。 固然,這並不必定意味着全部瀏覽器的行爲都徹底相同。 cookie

可是,一般,默認路徑(若是cookie中未指定)的默認規則是Set-Cookie標頭從其到達的URL中的路徑。 一樣,域的默認值是Set-Cookie到達的URL中的完整主機名。 app

域的匹配規則要求Cookie域與要向其發出請求的主機匹配。 Cookie能夠經過包含*指定更普遍的域匹配。 在Set-Cookie的domain屬性中(瀏覽器的這一區域可能有所不一樣)。 匹配路徑(假設域匹配)很簡單,請求的路徑必須在cookie上指定的路徑內。 一般,會話cookie是使用path = /或path = / applicationName /設置的,所以cookie可供應用程序中的全部請求使用。 dom


回覆:

  • .example.com的cookie是否可用於www.example.com?
  • .example.com的cookie是否可用於example.com? 不知道
  • www.example.com是否可使用example.com的cookie? 不該該...
  • example.com的cookie是否可用於anotherexample.com? 沒有
  • www.example.com能夠爲example.com設置cookie嗎?
  • www.example.com可以爲www2.example.com設置cookie嗎? (經過.example.com除外)
  • www.example.com能夠爲.com設置cookie嗎? (沒法在名稱空間的上方設置cookie,也不能爲.co.uk之類的設置cookie)

*我如今沒法對此進行測試,但我暗示至少IE7 / 6會將路徑example.com視爲.example.com測試


#2樓

儘管如今有應該定義cookie的RFC 2965Set-Cookie2 ,已通過時的RFC 2109 ),可是大多數瀏覽器並不徹底支持cookie,而是僅符合Netscape原始規範

屬性值和有效域之間是有區別的:前者來自Set-Cookie標頭字段,後者是對該屬性值的解釋。 根據RFC 2965,如下內容應適用:

  • 若是Set-Cookie標頭字段具備Domain屬性,則有效域是請求的域。
  • 若是存在Domain屬性,則其值將用做有效域(若是該值不以.開頭,則它將由客戶端添加)。

擁有有效域後,它還必須當前請求的域進行域匹配以進行設置; 不然,cookie將被修改。 相同的規則適用於選擇要在請求中發送的cookie。


將這些知識映射到您的問題上,應遵循如下條件:

  • 餅乾與Domain=.example.com 可用於www.example.com
  • 餅乾與Domain=.example.com 可用於example.com
  • Cookie與Domain=example.com將被轉換爲.example.com而且所以也可用於www.example.com
  • 具備Domain=example.com Cookie 不適用於anotherexample.com
  • www.example.com 可以爲example.com設置cookie
  • www.example.com沒法www2.example.com設置cookie
  • www.example.com沒法.com設置Cookie

並設置和讀取www.example.comexample.com的cookie,分別將其設置爲.www.example.com.example.com 。 可是第一個( .www.example.com )僅可用於該域下的其餘域(例如foo.www.example.combar.www.example.com ),在該域中,任何用戶均可以訪問.example.com example.com下面的其餘域(例如foo.example.combar.example.com )。


#3樓

有一些規則肯定瀏覽器是否接受Set-header響應頭(服務器端cookie編寫),使用Javascript設置cookie的規則/解釋略有不一樣(我還沒有測試VBScript)。

而後是肯定瀏覽器是否將與頁面請求一塊兒發送cookie的規則。

主要瀏覽器引擎之間的區別在於如何處理域匹配以及如何解釋路徑值中的參數。 您能夠在文章「不一樣的瀏覽器如何不一樣地處理Cookie」中找到一些經驗證據。


#4樓

此問題的最後一個(確切地說是第三個)RFC是RFC-6265(已淘汰RFC-2965,然後者又淘汰了RFC-2109)。

根據它,若是服務器省略了Domain屬性,則用戶代理將cookie僅返回到原始服務器 (給定資源所在的服務器)。 但這同時也警告某些現有用戶代理將缺乏的Domain屬性視爲存在Domain屬性幷包含當前主機名(例如,若是example.com返回不具備Domain屬性的Set-Cookie標頭,則這些用戶代理會也會將Cookie錯誤地發送到www.example.com)。

指定Domain屬性後,它將被視爲完整的域名(若是屬性中有前導點,它將被忽略)。 服務器應匹配屬性中指定的域(具備徹底相同的域名或做爲其子域)以獲取此cookie。 更準確地說是在這裏指定的

所以,例如:

  • Cookie屬性Domain=.example.com等效於Domain=example.com
  • 具備此類Domain屬性的Cookie將用於example.comwww.example.com
  • 具備此類Domain屬性的Cookie 不適用於another-example.com
  • 指定Cookie屬性(例如Domain=www.example.com將關閉www4.example.com的方式

PS:「域」屬性中的尾部逗號將致使用戶代理忽略該屬性=(


#5樓

www.example.com可以爲.com設置cookie嗎?

否,可是example.com.fr可能能夠爲example2.com.fr設置cookie。 Firefox經過維護TLD列表來防止這種狀況: http : //securitylabs.websense.com/content/Blogs/3108.aspx

顯然Internet Explorer不容許兩個字母的域設置cookie,我想這解釋了爲何o2.ie只是重定向到o2online.ie 。 我常常想知道。

相關文章
相關標籤/搜索