Cookie是由W3C組織提出,最先由NetScape社區發展的一種機制。Cookie是存儲於訪問者的計算機中的變量。每當同一臺計算機經過瀏覽器請求某個頁面時,就會發送這個cookie。其實cookie是一個很小的文本文件,是瀏覽器儲存在用戶的機器上的。Cookie是純文本,沒有可執行代碼。儲存一些服務器須要的信息,每次請求站點,會發送相應的cookie,這些cookie能夠用來辨別用戶身份信息等做用。cookie能夠包含任意的信息,客戶端會記錄服務器返回來的Set-Cookie首部中的cookie內容。並將cookie存儲在瀏覽器的cookie數據庫中,當用戶訪問同一站點時,在Cookie請求首部發送過去。面試
JavaScript 可使用 document.cookie 屬性來建立 、讀取、及刪除 cookie。
JavaScript 中,建立 cookie 以下所示:chrome
document.cookie="username=John Doe";
您還能夠爲 cookie 添加一個過時時間(以 UTC 或 GMT 時間)。默認狀況下,cookie 在瀏覽器關閉時刪除:數據庫
document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT";
您可使用 path 參數告訴瀏覽器 cookie 的路徑,domain 參數告訴瀏覽器 cookie 的域名。默認狀況下,cookie 屬於當前頁面。後端
document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/; domain= .abc.com";
在 JavaScript 中, 可使用如下代碼來讀取 cookie:跨域
var x = document.cookie;
document.cookie 將以字符串的方式返回全部的 cookie,類型格式: cookie1=value; cookie2=value; cookie3=value;瀏覽器
domain的含義爲域。假設有兩個域名
域名A a.b.e.f.com.cn
域名B c.d.e.f.com.cn
域名有分級的概念,也就是說域名A與域名B都是f.com.cn的子域名,f.com.cn又是com.cn的子域名
在域名A所使用的服務中,能夠設置域名
a.b.e.f.com.cn
b.e.f.com.cn
e.f.com.cn
f.com.cn
在服務端設置domain的時候,設置domain爲b.e.f.com.cn或.b.e.f.com.cn沒有區別,注意前面的點,即只要是爲cookie顯式的聲明domain,前面帶不帶點沒有區別。這個點的奧妙後面還會提到。
設置其餘域名雖然能夠在響應頭中有set-cookie的頭,可是出於安全考慮,該頭會被瀏覽器忽略,並不會產生真實的cookie,有一點注意,雖然在域名上來講,f.com.cn是com.cn的子域,可是瀏覽器是不會接收domain爲com.cn的cookie的,那樣互聯網就亂套了。
對於域名A下的cookie,域名B能夠拿到e.f.com.cn,f.com.cn這兩個domain下的cookie,互聯網上說的單點登陸,就是以這個原理實現的。
若是存在相同名的cookie不一樣domain呢?
好比域名A設置設置domain爲e.f.com.cn的cookie,mykey=myvalue1。
而在域名B中設置domain爲c.d.e.f.com.cn的cookie,mykey=myvalue2。
此時在域名B服務端能拿到兩個cookie都爲mykey=myvalue,並不存在覆蓋一說。
注意在域名B中若是設置domain爲e.f.com.cn的cookie,mykey=myvalue3.此時會覆蓋域爲e.f.com.cn的mykey的值,即瀏覽器中,同一個域,只存在一個名爲mykey的cookie。若是不顯式設置cookie,默認當前域名這種說法對不對呢? 先說第一個問題,若是不顯示設置cookie,那麼瀏覽器會生成一個只針對當前域名的cookie,什麼叫只針對當前域名呢?若是有一個域名就是e.f.com.cn,在該域名下設置的cookie若是沒有顯示domain,在回寫瀏覽器的時候瀏覽器會特殊處理,若是是火狐,你會發現該cookie的信息,有一個主機項,而域項消失了,在chrome中,雖然有域這個項,可是域的前面少了一個點,就是上面所說的,若是顯示聲明,無論域中帶不帶點,到chrome中,都是帶點存儲的,只有非顯式聲明域的cookie,瀏覽器存儲纔是不帶點的,問題就在這,在e.f.com.cn服務主機中生成的cookie,只有e.f.com.cn的服務器能拿到,此時子域名是拿不到這個cookie的。、安全
對於先後端涉及到的跨域問題能夠查找withCredentials相關資料
面試問題常常問到的關於cookie的問題 cookie與session區別 cookie與 localstorage區別服務器