Cookie--小知識總結

1、何爲cookie

因爲http協議是無狀態的,因此無法知道當前訪問的客戶端是誰,因此有了cookie這個東西,經過cookie來讓服務端知道當前是誰訪問我,能夠看作是一個身份牌前端

2、cookie的工做流程

(1) 第一次用戶登陸的時候,輸入用戶名和密碼信息,服務端接收後進行用戶認證。node

(2)服務端經過驗證後,生成一個token以cookie的形式放在http的response header中一塊兒返回給客戶端。後端

(3)瀏覽器根據是否設置cookie的過時時間判斷該cookie是會話cookie仍是永久cookie,並將cookie存儲在不一樣的位置。跨域

(4)下次進行http請求時,請求頭中會自動攜帶存儲的cookie。瀏覽器

(5)服務端根據請求頭中的cookie裏面的token確認該用戶的身份信息。服務器

3、配置cookie

cookie 一般由後端配置(固然前端也可配置),經過在http響應頭部設置cookie來添加cookiecookie

前端設置cookie

使用document.cookie便可dom

好比:ui

document.cookie = 'name=ry;max-age=2000;domian=ryuan.me;path=/;secure'

cookie有如下的屬性:this

  1. max-age:cookie過時的時間,表示多少秒後過時。
  2. expires:設置cookie過時的一個日期,表示在何時過時。max-age優先級高一些。
  3. domian:設置cookie存放的域,沒有設置則爲當前主機的域。
  4. path: cookie存儲的路徑
  5. secure: 加入此配置項,表示cookie只能經過https協議進行傳輸。

後端設置cookie

經過設置響應頭部信息,添加cookie,經過http響應返回給瀏覽器便可,瀏覽器收到cookie會自動保存下來。

var http = require('http');
http.createServer(function(req,res){
    res.setHeader('status','200 ok');
    res.setHeader('Set-Cookie','name=yyyy;max-age=10000;path=/;');
    res.write('hello this is cookie test!!');
    res.end();
}).listen(8800,()=>{
    console.log('sever start at 8800');
});

後端能夠設置cookie的屬性,除了上述前端能夠設置的以外,還有兩個:

  1. httpOnly :添加來這個屬性以後,表示前端不能JavaScript 經由 Document.cookie 屬性、XMLHttpRequest 和 Request APIs 進行訪問
  2. SameSite=Strict,SameSite=Lax
    容許服務器設定一則 cookie 不隨着跨域請求一塊兒發送,這樣能夠在必定程度上防範跨站請求僞造攻擊(CSRF)

4、單點登陸

前提:cookie在不一樣的域之間是不能夠訪問,修改的。可是在同一個一級域裏面,cookie是能夠共享的。

舉個例子:

  1. (不一樣域之間不能相互訪問)跨域不能訪問: 好比在qq.com和baidu.com之間是不能夠訪問到對方的cookie的
  2. 可是在同一個一級域裏面,其子域是能夠共享一個cookie的,好比在y.qq.com(QQ音樂的首頁), v.qq.com(騰訊視頻首頁),他們兩個都在qq.com這個一級域裏面,因此,cookie在同一一級域裏面能夠共享,基於這個能夠實現單點登陸(也就是在qq音樂登陸後,再訪問騰訊視頻後會自動登陸你的qq號)

怎麼實現

在設置cookie時對domain賦值成同一一級域名便可

好比node中:

res.setHeader('Set-Cookie','name=yyyy;max-age=10000;path=/;domain=qq.com';)

我的筆記總結,僅供參考,大步走多回頭

等什麼望穿秋水 任來世枯朽成灰

Ry(元)http://www.cnblogs.com/Ry-yuan/

相關文章
相關標籤/搜索