cookie 是儲存在瀏覽器某個檔案中的一段key=value
字串
服務端下發響應時,可以在響應頭加上set-cookie: key= value
,告訴瀏覽器,需要儲存哪些cookie
瀏覽器在傳送請求時,會將此域下的所有cookie字串,放在http請求header中的cookie
欄位中,隨請求傳送給服務端。
因此服務端可以利用cookie的這種性質,儲存一些使用者特徵。
domain 規定這個cookie在哪些網域名稱下有效,預設取當前host作為domain
path 規定cookie在此domain下的特殊路由下生效,算是乙個細分的屬性,一般用不到,預設/,表示全路由生效
cookie 的過期時間
js不能拿到這個cookie值,預設為false
它是乙個布林值,指定在網路上如何傳輸cookie,預設是不安全的,通過乙個普通的http連線傳輸
乙個完整的cookie寫法:
複製**1.cookie只能設定到當前域或者當前網域名稱一級網域名稱下,不能設定到其他網域名稱下。
2.瀏覽器在傳送請求是,只傳送網域名稱下的cookie,不會發別的網域名稱下的cookie。
比如, 請求www.webfem.com的請求,只會在header的cookie中帶上domain是www.webfem.com
(當前域) 或者.webfem.com
(一級域)的cookie。不可能帶其他任何domain的cookie。
這兩點都是瀏覽器規定的安全規則。
現在一般的服務端框架都會封裝setcookie
操作,
比如:
// express
res.cookie(name, value [, options])
// koa
ctx.cookies.set(name, value, [options])
複製**
為了體現本質操作,這裡寫個net
模組的應用
require('net').createserver(function(sock) );
}).listen(8080, '127.0.0.1');
複製**
響應報文
複製**js操作cookie,只能通過document.cookie
屬性獲取,它是乙個可讀可寫的屬性。但是設定了http-only
屬性的cookie,這個屬性就取不到了。具體操作如下:
// get cookie。document.cookie 會返回所有cookie組成的字串
document.cookie;
// set cookie。 給 document.cookie 賦值,逐一修改原有cookie,而不會全部覆蓋
document.cookie = 'sessionid=12323;name=space';
// 刪除cookie, 原理:cookie 值設為空,過期時間設乙個比現在早的時間
document.cookie = `sessionid=;expires=$`
複製**
js 能拿到cookie,這為前端開發帶來的方便,但是,也出現了一些安全隱患,比如通過
標籤載入的第三方js,就有可能惡意修改本地cookie,所以設定httponly是個很好的習慣。
原文發布於:webfem.com/post/cookie…
參考文件: blog.csdn.net/helloliuhai…
HTTP協議中Cookie徹底解讀
cookie總是儲存在客戶端中,按在客戶端中的儲存位置,可分為記憶體cookie和硬碟cookie。記憶體cookie由瀏覽器維護,儲存在記憶體中,瀏覽器關閉後就消失了,其存在時間是短暫的。硬碟cookie儲存在硬碟裡,有乙個過期時間,除非使用者手工清理或到了過期時間,硬碟cookie不會被刪除,其...
Http協議中Cookie詳細介紹
cookie總是儲存在客戶端中,按在客戶端中的儲存位置,可分為記憶體cookie和硬碟cookie。記憶體cookie由瀏覽器維護,儲存在記憶體中,瀏覽器關閉後就消失了,其存在時間是短暫的。硬碟cookie儲存在硬碟裡,有乙個過期時間,除非.cookie總是儲存在客戶端中,按在客戶端中的儲存位置,可...
HTTP協議之Cookie和Session
http是無狀態協議,那麼服務端如何識別特定的客戶端呢?注 無狀態指http協議自身不對請求和響應之間的通訊狀態進行儲存。對傳送過的請求和響應都不做持久化處理 即不做任何儲存 每次http請求的時候,客戶端都會傳送相應的cookie資訊到服務端。實際上大多數的應用都是用cookie來實現sessio...