使用Session

Express本体没有对Session进行支持,不过我们也并不需要自己造轮子,我们可以使用express-session库,它以中间件的形式封装了Session实现,底层可以使用内存、Redis、MongoDB等后端保存数据。

安装express-session

我们可以执行以下命令安装express-session库。

npm install --save express-session

使用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中间件:

  • secret:加密密钥,express-session会对Session数据进行加密处理,虽然这可能在基于服务端存储的Session中用处不大
  • resave:是否在Session未改变的时候也强制更新Session,一般设置为true
  • saveUninitialized:是否将未初始化的Session存储,一般设置为false

session对象实际上是一个Express中间件,因此我们需要使用app.use()将其添加到框架中,另外注意它需要设置在router中间件之前。具体的处理函数中,我们对req.session属性读写即可实现对Session数据的读写。

注意:默认情况下,Cookie保存的键名为connect.sid

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap