1、安装express-session及session持久化中间件
npm install express-session
session持久化插件安装说明
mac、linux平台使用session-file-store npm install session-file-store
win平台使用nedb-session-store npm install nedb-session-store
2、导入及创建中间件
mac
// 导入
const session = require("express-session");
const FileStore = require('session-file-store')(session);
// 创建 session 中间件
const sessionMiddleware = session({
store:new FileStore(),//数据持久化方式,这里表示本地文件存储
secret: 'keyboard cat', //加密key 可以随意书写
cookie: { maxAge: 60000 }//两次请求的时间差 即超过这个时间再去访问 session就会失效
})
win
var session = require("express-session")
var NedbStore = require('nedb-session-store')( session );
const sessionMiddleware = session({
secret: "fas fas",
resave: false,
saveUninitialized: false,
cookie: {
path: '/',
httpOnly: true,
maxAge: 365 * 24 * 60 * 60 * 1000 // e.g. 1 year
},
store: new NedbStore({
filename: 'path_to_nedb_persistence_file.db'
})
})
3、为express应用程序加入session中间件
app.use(sessionMiddleware);
以上代码都在app.js里面!
4、session在路由中的使用
router.get('/', function(req, res) {
const session = req.session;
session.xxx //操作session
});
使用样例
后台index.js
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
const session = req.session;
if (!session.num) {
session.num = 0;
}
console.log(++session.num);
res.render('index', { title: `Express这是第 ${session.num} 次访问` });
});
module.exports = router;
如果在设置的时效内,即使关了服务器再次打开,去别的界面也能访问session.num!
users.js
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
const session = req.session;
if(!session.num){
session.num = 0;
}
if(session.user){
let name = session.name;
res.send(name + "第" + ++session.num + "次登录");
}else{
res.send("还没有登录");
});
module.exports = router;