一、添加session-file-store
npm install –save express-session
把session保存到session文件中
npm install –save session-file-store
或者把session保存到mongodb中
npm install –save connect-mongo
或者保存到redis缓存中
npm install –save connect-redis
二、在app.js中添加引用
var session = require('express-session');
var FileStore = require('session-file-store')(session);
或者
var MongoStore = require('connect-mongo')(session);// 引入mongo用来保存session
或者
var RedisStrore = require('connect-redis')(session);
三、在app.js中添加使用中间件
app.use(session({
name: config.sessionId,
secret: config.sessionSecret, // 用来对session id相关的cookie进行签名
store: new FileStore(), // 本地存储session(文本文件,也可以选择其他store,比如redis或者mongodb)
saveUninitialized: true, // 是否自动保存未初始化的会话,一定是true
resave: false, // 是否每次都重新保存会话,建议false
cookie: {
maxAge: 10 * 1000 // 有效期,单位是毫秒
}
}));
或者用mongodb
app.use(session({
name: config.sessionId,
secret: config.sessionSecret, // 用来对session id相关的cookie进行签名
store: new MongoStore({ //创建新的mongodb数据库
url: config.url, //比如:'mongodb://cha:root@localhost:27017/ch_db'
collection: config.sessionCollection //比如:'ch_sessions'
}),
saveUninitialized: true, // 是否自动保存未初始化的会话,这里一定是true
resave: false, // 是否每次都重新保存会话,建议false
cookie: {
maxAge: 24*60*60*1000 // 有效期,单位是毫秒
}
}));
或者使用redis
app.use(session({
name: config.sessionId,
secret: config.sessionSecret, // 用来对session id相关的cookie进行签名
store: new RedisStrore({
"host" : "192.168.0.13",
"port" : "6379",
"pass" : "123456",
"db" : 1,
"ttl" : 1800,
"logErrors" : true
}),
saveUninitialized: true, // 是否自动保存未初始化的会话,这里一定是true
resave: false, // 是否每次都重新保存会话,建议false
cookie: {
maxAge: 24*60*60*1000 // 有效期,单位是毫秒
}
}));
四、在app.js所有use路由中间件之前,添加一个登录验证中间件:
app.use(function(req, res, next) {
//不是登录页面或者登录页面的请求,并且session中没有身份验证信息
if(req.path.indexOf('/login')<0 && !req.session.user){
return res.redirect('login');//跳转到登录页面
}else{
next();//继续往下走
}
});
//这里是登录用的中间件,
app.use('/login', login);
app.use('/login/*', login);
....//这里是其它所有的中间件
五、req.session.user = user.name; //登录成功后添加session
delete req.session.user;//退出时删除保存的user
//res.clearCookie(sessionId);//退出系统时清空cookie