一、Cookie 簡介
● cookie 是存儲於訪問者的計算機中的變量。可以讓我們用同一個瀏覽器訪問同一個域
名的時候共享數據。
● HTTP 是無狀態協議。簡單地說,當你瀏覽了一個頁面,然后轉到同一個網站的另一個頁
面,服務器無法認識到這是同一個瀏覽器在訪問同一個網站。每一次的訪問,都是沒有任何
關系的。
● Cookie 是一個簡單到爆的想法:當訪問一個頁面的時候,服務器在下行 HTTP 報文中,
命令瀏覽器存儲一個字符串; 瀏覽器再訪問同一個域的時候,將把這個字符串攜帶到上行
HTTP 請求中。第一次訪問一個服務器,不可能攜帶 cookie。 必須是服務器得到這次請求,
在下行響應報頭中,攜帶 cookie 信息,此后每一次瀏覽器往這個服務器發出的請求,都會
攜帶這個 cookie。
二、Cookie 特點
● cookie 保存在瀏覽器本地
● 正常設置的 cookie 是不加密的,用戶可以自由看到;
● 用戶可以刪除 cookie,或者禁用它
● cookie 可以被篡改
● cookie 可以用於攻擊
● cookie 存儲量很小。未來實際上要被 localStorage 替代,但是后者 IE9 兼容。
三、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 不能和其他屬性項的名字
一樣
Expires: 過期時間(秒),在設置的某個時間點后該 Cookie 就會失效,如 expires=Wednesday,
09-Nov-99 23:12:40 GMT
maxAge: 最大失效時間(毫秒),設置在多少后失效
secure: 當 secure 值為 true 時,cookie 在 HTTP 中是無效,在 HTTPS 中才有效
Path: 表示 cookie 影響到的路,如 path=/。如果路徑不能匹配時,瀏覽器則不發送這個 Cookie
httpOnly:是微軟對 COOKIE 做的擴展。如果在 COOKIE 中設置了“httpOnly”屬性,則通過程序(JS
腳本、applet 等)將無法讀取到 COOKIE 信息,防止 XSS 攻擊產生
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});
四、加密 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 調用設置的 cookie
console.log(req.signedCookies);
