一矿卑、關(guān)于Cookie
在我們關(guān)閉一個(gè)登錄過的網(wǎng)址并重新打開它后账胧,我們的登錄信息依然沒有丟失;當(dāng)我們?yōu)g覽了商品后歷史記錄里出現(xiàn)了我們點(diǎn)擊過的商品汤纸;當(dāng)我們推回到首頁(yè)后,推薦商品也為我們選出了相似物品芹血;事實(shí)上當(dāng)我們有過此類操作后贮泞,瀏覽器會(huì)將我們的操作信息保存到cookie上面。阿進(jìn)而言之幔烛,cookie就是儲(chǔ)存在用戶本地終端上的數(shù)據(jù)啃擦。
Cookie的特點(diǎn)
1.cookie保存在瀏覽器本地,只要不過期關(guān)閉瀏覽器也會(huì)存在饿悬。
2.正常情況下cookie不加密令蛉,用戶可輕松看到
3.用戶可以刪除或者禁用cookie
4.cookie可以被篡改
5.cookie可用于攻擊
6.cookie存儲(chǔ)量很小,大小一般是4k
7.發(fā)送請(qǐng)求自動(dòng)帶上登錄信息
二狡恬、Cookie的安裝及使用
1.安裝
cnpm install cookie-parser --save
2.引入
const cookieParser=require("cookie-parser");
3.設(shè)置中間件
app.use(cookieParser());
4.設(shè)置cookie
res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});
//res.cookie(名稱,值,{配置信息});
關(guān)于設(shè)置cookie的參數(shù)說明:
domain: 域名
name=value:鍵值對(duì)珠叔,可以設(shè)置要保存的 Key/Value蝎宇,注意這里的 name 不能和其他屬性項(xiàng)的名字一樣
Expires: 過期時(shí)間(秒),在設(shè)置的某個(gè)時(shí)間點(diǎn)后該 Cookie 就會(huì)失效运杭,如 expires=Wednesday, 09-Nov-99 23:12:40 GMT夫啊。
maxAge: 最大失效時(shí)間(毫秒),設(shè)置在多少后失效 辆憔。
secure: 當(dāng) secure 值為 true 時(shí)撇眯,cookie 在 HTTP 中是無(wú)效,在 HTTPS 中才有效 虱咧。
Path: 表示 在那個(gè)路由下可以訪問到cookie熊榛。
httpOnly:是微軟對(duì) COOKIE 做的擴(kuò)展。如果在 COOKIE 中設(shè)置了“httpOnly”屬性腕巡,則通過程序(JS 腳本玄坦、applet 等)將無(wú)法讀取到COOKIE 信息,防止 XSS 攻擊的產(chǎn)生 绘沉。
singed:表示是否簽名cookie, 設(shè)為true 會(huì)對(duì)這個(gè) cookie 簽名煎楣,這樣就需要用 res.signedCookies 而不是 res.cookies 訪問它。被篡改的簽名 cookie 會(huì)被服務(wù)器拒絕车伞,并且 cookie 值會(huì)重置為它的原始值择懂。
5.獲取cookie
req.cookie.name;
下面是一個(gè)基礎(chǔ)實(shí)例:
const express=require("express");
const cookieParser=require("cookie-parser");
var app=express();
//設(shè)置中間件
app.use(cookieParser());
app.get("/",function(req,res){
????res.send("首頁(yè)");
});
//設(shè)置cookie
app.get("/set",function(req,res){
????res.cookie("userName",'張三',{maxAge: 20000, httpOnly: true});
????res.send("設(shè)置cookie成功");
});
//獲取cookie
app.get("/get",function(req,res){
????console.log(req.cookies.userName);
????res.send("獲取cookie成功,cookie為:"+ req.cookies.userName);
});
app.listen(8080);
當(dāng)訪問set路由后會(huì)設(shè)置cookie另玖,當(dāng)訪問get路由后會(huì)獲取到設(shè)置的cookie值困曙。當(dāng)然你也可以在其他頁(yè)面繼續(xù)獲取當(dāng)前cookie,以實(shí)現(xiàn)cookie共享谦去。
三慷丽、多個(gè)二級(jí)域名共享cookie
只需要增加res.cookie中option對(duì)象的值,即可實(shí)現(xiàn)對(duì)相應(yīng)路由下多個(gè)二級(jí)路由的cookie進(jìn)行共享鳄哭,代碼如下:
const express=require("express");
const cookieParser=require("cookie-parser");
var app=express();
//設(shè)置中間件
app.use(cookieParser());
app.get("/",function(req,res){
????res.send("首頁(yè)");
});
//設(shè)置cookie
app.get("/set",function(req,res){
????res.cookie("userName",'張三',{maxAge: 200000, httpOnly: true,domain: "ccc.com"});
????res.send("設(shè)置cookie成功");
});
//獲取cookie
app.get("/get",function(req,res){
????console.log(req.cookies.userName);
????res.send("獲取cookie成功要糊,cookie為:"+ req.cookies.userName);
});
app.listen(8080);
我們可以看到:
不同的二級(jí)域名也能訪問到相同的cookie,只要滿足ccc.com這個(gè)頂級(jí)域名就行妆丘。锄俄,關(guān)于下一章我會(huì)講解cookie加密(簽名),先寫到這里吧飘痛!