一、關於Cookie
在我們關閉一個登錄過的網址並重新打開它后,我們的登錄信息依然沒有丟失;當我們瀏覽了商品后歷史記錄里出現了我們點擊過的商品;當我們推回到首頁后,推薦商品也為我們選出了相似物品;事實上當我們有過此類操作后,瀏覽器會將我們的操作信息保存到cookie上面。阿進而言之,cookie就是儲存在用戶本地終端上的數據。
Cookie的特點
1.cookie保存在瀏覽器本地,只要不過期關閉瀏覽器也會存在。 2.正常情況下cookie不加密,用戶可輕松看到 3.用戶可以刪除或者禁用cookie 4.cookie可以被篡改 5.cookie可用於攻擊 6.cookie存儲量很小,大小一般是4k 7.發送請求自動帶上登錄信息
二、Cookie的安裝及使用
1.安裝
cnpm install cookie-parser --save
2.引入
const cookieParser=require("cookie-parser");
3.設置中間件
app.use(cookieParser());
4.設置cookie
res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});
//res.cookie(名稱,值,{配置信息})
關於設置cookie的參數說明:
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。 httpOnly:是微軟對 COOKIE 做的擴展。如果在 COOKIE 中設置了“httpOnly”屬性,則通過程序(JS 腳本、applet 等)將無法讀取到COOKIE 信息,防止 XSS 攻擊的產生 。 singed:表示是否簽名cookie, 設為true 會對這個 cookie 簽名,這樣就需要用 res.signedCookies 而不是 res.cookies 訪問它。被篡改的簽名 cookie 會被服務器拒絕,並且 cookie 值會重置為它的原始值。
5.獲取cookie
req.cookie.name;
下面是一個基礎實例:
const express=require("express");
const cookieParser=require("cookie-parser");
var app=express();
//設置中間件
app.use(cookieParser());
app.get("/",function(req,res){
res.send("首頁");
});
//設置cookie
app.get("/set",function(req,res){
res.cookie("userName",'張三',{maxAge: 20000, httpOnly: true});
res.send("設置cookie成功");
});
//獲取cookie
app.get("/get",function(req,res){
console.log(req.cookies.userName);
res.send("獲取cookie成功,cookie為:"+ req.cookies.userName);
});
app.listen(8080);
當訪問set路由后會設置cookie,當訪問get路由后會獲取到設置的cookie值。當然你也可以在其他頁面繼續獲取當前cookie,以實現cookie共享。
三、多個二級域名共享cookie
只需要增加res.cookie中option對象的值,即可實現對相應路由下多個二級路由的cookie進行共享,代碼如下:
const express=require("express");
const cookieParser=require("cookie-parser");
var app=express();
//設置中間件
app.use(cookieParser());
app.get("/",function(req,res){
res.send("首頁");
});
//設置cookie
app.get("/set",function(req,res){
res.cookie("userName",'張三',{maxAge: 200000, httpOnly: true,domain: "ccc.com"});
res.send("設置cookie成功");
});
//獲取cookie
app.get("/get",function(req,res){
console.log(req.cookies.userName);
res.send("獲取cookie成功,cookie為:"+ req.cookies.userName);
});
app.listen(8080);
我們可以看到:


不同的二級域名也能訪問到相同的cookie,只要滿足ccc.com這個頂級域名就行。關於下一章我會講解cookie加密(簽名),先寫到這里吧!
