HTTP 協議中的 cookie

2021-09-24 07:37:30 字數 2045 閱讀 1525

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...