cookie和session的工作機制:
由于cookie保存在客戶端臭猜,不能存放敏感信息鹦倚,而session保存于服務(wù)器端河质,可用于存放敏感信息。比如對用戶登錄狀態(tài)的保存震叙。但是http是無狀態(tài)的掀鹅,session如何保存用戶登錄狀態(tài)呢,當用戶登錄成功之后媒楼,服務(wù)器端會將用戶信息對應(yīng)于一個session數(shù)據(jù)乐尊,并將獲取這個session數(shù)據(jù)的鑰匙發(fā)送給客戶端,而這個鑰匙在客戶端的保存形式是保存在cookie中划址,用戶再次訪問當前網(wǎng)站的其他網(wǎng)頁的時候扔嵌,將cookie信息一起發(fā)送給服務(wù)器限府,當服務(wù)器收到cookie中保存的鑰匙的時候,查看這個鑰匙對應(yīng)的session數(shù)據(jù)痢缎,從而判斷用戶是否是在登錄狀態(tài)的胁勺,如果已經(jīng)登錄,則可以直接訪問独旷,否則跳轉(zhuǎn)到登錄頁署穗。
而在express框架中,默認不支持Session和Cookie嵌洼,但是可以使用第三方中間件express-session
來解決
下載:
npm install --save express-session
配置
var session = require('express-session'); # 引入
# 配置中間件
app.use(session({
// 配置加密字符串案疲,會在原有加密基礎(chǔ)上和這個字符串拼起來去加密
// 目的是:增加安全性,防止客戶端惡意偽造
secret: 'chen',
resave: true,
// 當為false,表示只有使用session麻养,才會分配鑰匙
// 當為true褐啡,表示無論是否使用session,都會分配鑰匙
saveUninitialized: false
}))
使用
#req.session.xx = xx表示設(shè)置session(對象)
# req.session.xx 表示獲取session數(shù)據(jù)
app.get('/',(req,res) => {
# 當訪問/的時候,設(shè)置當前session值鳖昌,并將session鑰匙回傳給客戶端春贸,保存在客戶端的cookie中
req.session.uname = 'chen';
res.render('index.html',{
name: 'chen'
})
})
app.get('/a',(req,res) => {
// 當訪問/a的時候,獲取session數(shù)據(jù)
console.log(req.session.uname);
res.send('ok');
})