session是一種記錄客戶狀態(tài)的機(jī)制,和Cookie不同的時(shí) Cookie保存在客戶端瀏覽器中,而session保存在服務(wù)器上。
客戶端瀏覽器訪問服務(wù)器的時(shí)候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上,這就是session??蛻舳藶g覽器再次訪問時(shí)只需要從該Session中查找該客戶的狀態(tài)就可以了。
如果說Cookie機(jī)制是通過檢查客戶身上的“通行證”來確定客戶身份的話,那么session機(jī)制就是通過檢查服務(wù)器上的“客戶明細(xì)表”來確認(rèn)客戶身份。
session相當(dāng)于程序在服務(wù)器上建立的一份客戶檔案,客戶來訪的時(shí)候只需要查詢客戶檔案表就可以了。
實(shí)用方法:
1.安裝express-session
npm ?install ?express-session ?--save-dev ???//注意-g無效
2.app.js中
var session = require('express-session');
app.use(cookieParser()); ????//---必須在此行下面添加
------------------------------------------------------------
app.use(session({secret: 'recommand 128 bytes random string',
//---建議使用128個(gè)字符的隨機(jī)字符串
cookie: { maxAge: 20 * 60 * 1000 },
//---cookie生存周期20*60秒
resave: true,
//---cookie之間的請(qǐng)求規(guī)則,假設(shè)每次登陸,就算會(huì)話存在也重新保存一次
saveUninitialized: true
//---強(qiáng)制保存未初始化的會(huì)話到存儲(chǔ)器
}));
3.路由實(shí)用session
if(rs){
varloginbean = {};
loginbean.id=rs._id;
loginbean.nicheng = rs.nicheng;
loginbean.role = rs.role;
req.session.loginbean = loginbean;
res.redirect('/'); ???//---跳轉(zhuǎn)回index頁
}
4.ejs中識(shí)別session
router.get('/', function(req, res, next) {
res.locals.loginbean = req.session.loginbean;
res.render('index', {});
});
5.注銷session
router.get('/logout', function(req, res, next) {
delete req.session.loginbean;
res.redirect('/');
});