1、Cookie 簡介
● cookie 是存儲於訪問者的計算機中的變量。可讓咱們用同一個瀏覽器訪問同一個域
名的時候共享數據。
● HTTP 是無狀態協議。簡單地說,當你瀏覽了一個頁面,而後轉到同一個網站的另外一個頁
面,服務器沒法認識到這是同一個瀏覽器在訪問同一個網站。每一次的訪問,都是沒有任何
關係的。
● Cookie 是一個簡單到爆的想法:當訪問一個頁面的時候,服務器在下行 HTTP 報文中,
命令瀏覽器存儲一個字符串; 瀏覽器再訪問同一個域的時候,將把這個字符串攜帶到上行
HTTP 請求中。第一次訪問一個服務器,不可能攜帶 cookie。 必須是服務器獲得此次請求,
在下行響應報頭中,攜帶 cookie 信息,此後每一次瀏覽器往這個服務器發出的請求,都會
攜帶這個 cookie。npm
2、Cookie 特色
● cookie 保存在瀏覽器本地
● 正常設置的 cookie 是不加密的,用戶能夠自由看到;
● 用戶能夠刪除 cookie,或者禁用它
● cookie 能夠被篡改
● cookie 能夠用於攻擊
● cookie 存儲量很小。將來實際上要被 localStorage 替代,可是後者 IE9 兼容。瀏覽器
3、Cookie 的使用
1.安裝 cnpm instlal cookie-parser --save
2.引入 var cookieParser = require('cookie-parser');
3.設置中間件
app.use(cookieParser());
4.設置 cookie
res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});
//HttpOnly 默認 false 不容許 客戶端腳本訪問
5.獲取 cookie
req.cookies.name服務器
屬性說明:
domain: 域名
name=value:鍵值對,能夠設置要保存的 Key/Value,注意這裏的 name 不能和其餘屬性項的名字
同樣cookie
Expires: 過時時間(秒),在設置的某個時間點後該 Cookie 就會失效,如 expires=Wednesday,
09-Nov-99 23:12:40 GMTapp
maxAge: 最大失效時間(毫秒),設置在多少後失效dom
secure: 當 secure 值爲 true 時,cookie 在 HTTP 中是無效,在 HTTPS 中才有效網站
Path: 表示 cookie 影響到的路,如 path=/。若是路徑不能匹配時,瀏覽器則不發送這個 Cookie
httpOnly:是微軟對 COOKIE 作的擴展。若是在 COOKIE 中設置了「httpOnly」屬性,則經過程序(JS
腳本、applet 等)將沒法讀取到 COOKIE 信息,防止 XSS 攻擊產生ui
singed:表示是否簽名 cookie, 設爲 true 會對這個 cookie 簽名,這樣就須要用
res.signedCookies 而不是 res.cookies 訪問它。被篡改的簽名 cookie 會被服務器拒絕,而且 cookie
值會重置爲它的原始值
設置 cookie
res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })
res.cookie('name', 'tobi', { domain: '.example.com', path: '/admin', secure: true });
res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly:
true });加密
獲取 cookie
req.cookies.name
刪除 cookie
res.cookie('rememberme', '', { expires: new Date(0)});
res.cookie('username','zhangsan',{domain:'.ccc.com',maxAge:0,httpOnly:true});spa
4、加密 Cookie
1.配置中間件的時候須要傳參
var cookieParser = require('cookie-parser');
app.use(cookieParser('123456'));
2.設置 cookie 的時候配置 signed 屬性
res.cookie('userinfo','hahaha',{domain:'.ccc.com',maxAge:900000,httpOnly:true,signed:true});
3. signedCookies 調用設置的 cookieconsole.log(req.signedCookies);