Express本体没有对Session进行支持,不过我们也并不需要自己造轮子,我们可以使用express-session
库,它以中间件的形式封装了Session实现,底层可以使用内存、Redis、MongoDB等后端保存数据。
我们可以执行以下命令安装express-session
库。
npm install --save express-session
这里简单起见,我们就直接使用基于内存的Session后端,其它Session后端用法也是类似的,只不过配置上有些区别,具体用法可以参考官方文档。
const express = require('express');
const expressSession = require('express-session');
const router = express.Router();
const app = express();
const session = expressSession({
secret: 'G1Wdumt0xvLFtnbBTvj%GKeDpw5xjkCv!HViqSWJ$cKPAun@Gq',
resave: true,
saveUninitialized: false
});
router.get('/', function (req, res, next) {
// 获取Session
const user = req.session.user;
console.log(user);
// 写入Session
req.session.user = { name: 'Tom', age: 18 };
res.sendStatus(200);
});
app.use(session);
app.use(router);
app.listen(8080, () => {
console.log('Express server listen on 8080');
});
代码中,我们首先初始化了Session中间件:
express-session
会对Session数据进行加密处理,虽然这可能在基于服务端存储的Session中用处不大true
false
session
对象实际上是一个Express中间件,因此我们需要使用app.use()
将其添加到框架中,另外注意它需要设置在router
中间件之前。具体的处理函数中,我们对req.session
属性读写即可实现对Session数据的读写。
注意:默认情况下,Cookie保存的键名为connect.sid
。