http是無狀態的,所以引入了cookie來管理服務器與客戶端之間的狀態
與cookie相關的http首部字段有:
1.Set-Cookie:它一個響應首部字段,從服務器發送到客戶端,當服務器想開始通過cookie進行狀態管理,它就會向客戶端發送Set-Cookie字段。
2.Cookie:它是一個請求首部字段,從客戶端發送到服務器
cookie是保存在客戶端的,cookie是綁定在特定域名下的(即:有效域名),當向cookie的有效域名發送請求時,都會帶上這個cookie。
Set-Cookie字段的屬性
1.NAME=VALUE:指定cookie的名稱和值,名稱大小寫不敏感,值必須經過URL編碼。
2.domain=域名:cookie的有效域名,所有向該域發送的請求中都會包括這個cookie信息,這個值可以包含子域(如:www.baidu.com,那么這個cookie的有效域就是www.baidu.com),也可以不包含子域(如:.baidu.com,那么這個cookie對所有的baidu.com的子域都有效),如果沒有指定這個值,它的默認值為設置cookie的那個域。正是因為這一限制,cookie是不能跨域的(www.qq.com不能訪問到www.baidu.com下的cookie)
3.path=路徑:用於指定向域中的哪個路徑發送請求時,應該帶上這個cookie,如果不指定,默認為當前目錄及其子目錄有效。例如,你可以指定cookie只有從www.baidu.com/one/中才能訪問,那么www.baidu.com的頁面就不能發送cookie
4.expires=Date:cookie的有效時間(即:何時應該停止向服務端發送這個cookie),默認情況下瀏覽器會話結束就會刪除所有的cookie,不過可以自己設置cookie的有效時間。如果將cookie的有效時間設置為一個過去的時間,那么這個cookie會立即被刪除
5.Secure:僅在HTTPS安全通信時才會發送cookie
6.HttpOnly:該cookie不能被腳本訪問
例子 Set-Cookie:myCookie=123;domain=www.baidu.com;path=/one/;expires=Mon,22-Jan-07 07:10:24 GMT;Secure;HttpOnly
補充:一旦Cookie從服務器發送到客戶端,服務器就不能顯示的刪除Cookie,但是可以覆蓋已經過期的Cookie,通過這種方式實現對客戶端cookie的刪除
Cookie字段
cookie字段中只包含名-值隊,如果有多個名-值隊就以逗號分隔
Javascript中的Cookie
在js中可以通過document.cookie訪問cookie,這個屬性會返回當前頁面可用的(cookie的域,路徑,失效時間,安全設置)所有cookie的字符串,用逗號分割的名-值隊。所有的名字和值都是通過URL編碼的,所有必須通過decodeURIComponent()解碼。
document.cookie除了可以獲取現有的cookie,還能設置新的cookie,設置的新的cookie會被添加到現有的cookie集合中,document.cookie不會覆蓋cookie除非設置的cookie名稱已經存在
