npm官網(wǎng):www.npmjs.com
安裝:npm install cookie-parser
報(bào)錯(cuò):
配置文件的name與這包名一樣就報(bào)錯(cuò)了。吏廉。裆熙。
(1)cookie-parser模塊
發(fā)送cookie:
名缝彬,值竞川,設(shè)置
app.get('/test', function(req, res) {
res.cookie('name', 'heqi', { maxAge: 900000 });
});
修改cookie:覆蓋即可
其他設(shè)置的值:
domain: 域名未状。設(shè)置子域名(二級(jí)域名)是否可以訪問cookie配乱。
例:domain:'.主域名'
name=value:鍵值對拐纱,可以設(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 中是無效久窟,在 HTTPS 中才有效
path: 表示 cookie 影響到的路由秩冈,如 path=/。如果路徑不能匹配時(shí)斥扛,瀏覽器則不發(fā)送這個(gè) Cookie
httpOnly: 是微軟對 COOKIE 做的擴(kuò)展入问。如果在 COOKIE 中設(shè)置了“httpOnly”屬性,則通過程序(客戶端)
(JS腳本稀颁、 applet 等)將無法讀取到 COOKIE 信息芬失,防止 XSS 攻擊產(chǎn)生
signed: 表示是否簽名 cookie, 設(shè)為 true 會(huì)對這個(gè) cookie 簽名,這樣就需要用res.signedCookies 訪問它
而不是 res.cookies 匾灶。被篡改的簽名 cookie 會(huì)被服務(wù)器拒絕棱烂,并且 cookie值會(huì)重置為它的原始值
獲取cookie
req的cookies屬性:req.cookie
刪除cookie:與瀏覽器一樣,沒有專門的方法阶女。
res.cookie('username', 'zhangsan', { maxAge:0 });
使用signed屬性加密cookie
1.配置中間件的時(shí)候需要傳參
app.use(cookieParser('123456'));
2.設(shè)置 cookie 的時(shí)候配置 signed 屬性
res.cookie('username', 'haha', { maxAge:900000, signed:true });
- 這樣就需要用req.signedCookies 訪問它而不是 req.cookies
console.log(req.signedCookies);
(2)express-session模塊
一垢啼、 Session 簡單介紹
session 是另一種記錄客戶狀態(tài)的機(jī)制, 不同的是 Cookie 保存在客戶端瀏覽器中张肾, 而 session 保存在服務(wù)器上。
二锚扎、 Session 的工作流程
當(dāng)瀏覽器訪問服務(wù)器并發(fā)送第一次請求時(shí)吞瞪,服務(wù)器端會(huì)創(chuàng)建一個(gè) session 對象,生成一個(gè)類似于key,value 的鍵值對驾孔,然后將 key(cookie)返回到瀏覽器(客戶)端芍秆,瀏覽器下次再訪問時(shí),攜帶 key(cookie)翠勉,找到對應(yīng)的 session(value)妖啥。 客戶的信息都保存在服務(wù)端的session 中。(具體翻看圖解HTTP)
三对碌、 express-session 的使用:
1.安裝 express-session
npm install express-session --save
2.引入 express-session
var session = require("express-session");
3.設(shè)置
app.use(session({
secret: 'keyboard cat',
resave: true,
saveUninitialized: true
}))
4.使用
設(shè)置值 req.session.username = "張三";
獲取值 req.session.username
5.設(shè)置參數(shù):
secret:一個(gè) String 類型的字符串荆虱,作為服務(wù)器端生成 session 的簽名。
name:返回客戶端的 key 的名稱朽们, 默認(rèn)為 connect.sid,也可以自己設(shè)置怀读。
resave:強(qiáng)制保存 session 即使它并沒有變化,。 默認(rèn)為 true骑脱。 建議設(shè)置成 false菜枷。
saveUninitialized:強(qiáng)制將未初始化的 session 存儲(chǔ)。 當(dāng)新建了一個(gè) session 且未設(shè)定屬性或值時(shí)叁丧, 它就處于未初始化狀態(tài)啤誊。 在設(shè)定一個(gè) cookie 前岳瞭, 這對于登陸驗(yàn)證, 減輕服務(wù)端存儲(chǔ)壓力蚊锹, 權(quán)限控制是有幫助的瞳筏。(默認(rèn): true) 。 建議手動(dòng)添加枫耳。
cookie:與cookie的設(shè)置一樣乏矾,設(shè)置發(fā)送到客戶端 的key 的屬性, 默認(rèn)值為{ path: ‘/’ , httpOnly: true, secure: false, maxAge: null }迁杨。
rolling:在每次請求時(shí)強(qiáng)行重新設(shè)置 cookie钻心, 這將重置 cookie 過期時(shí)間(默認(rèn): false)
6.express-session 的常用方法:
req.session.username = '張三';
req.session.username
req.session.cookie.maxAge = 0;
req.session.destroy(function(err) {
})
后面兩條可用于用戶退出登錄。
另外還有一個(gè)cookie-session模塊铅协,應(yīng)該也差不多捷沸。
四、將session保存到mongodb:
可用于實(shí)現(xiàn)負(fù)載均衡
1.需要安裝 express-session 和 connect-mongo 模塊
2.引入模塊
var session = require("express-session");
var MongoStore = require('connect-mongo')(session);
3.配置中間件
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
rolling:true,
cookie:{
maxAge:100000
},
store: new MongoStore({
url: 'mongodb://127.0.0.1:27017/person',
touchAfter: 24 * 3600 // time period in seconds
})
}))
這樣就可以連接mongodb狐史,自動(dòng)創(chuàng)建sessions集合痒给,然后將session對象自動(dòng)存進(jìn)去了。這當(dāng)然也可以用一般的操作實(shí)現(xiàn)骏全,但封裝好的模塊怎么能不用苍柏。