node 中 session存储方案和流程

本文介绍如何使用Koa框架配合koa-session-minimal和koa-mysql-session中间件,实现将session数据持久化存储到MySQL数据库的过程。通过示例代码展示了session的设置、获取及与数据库交互的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过 koa-session-minimal 代理层实现到 mysql 的 session 存储

const Koa = require("koa");
const Router = require("@koa/router");
const session = require("koa-session-minimal");
const MysqlSession = require("koa-mysql-session");

const app = new Koa();
const router = new Router();

/**
  配置存储 session 信息的 mysql

  database 数据库需要我们提前创建好
*/
let store = new MysqlSession({
  user: "root", // user
  password: "anc123",
  database: "base",
  host: "127.0.0.1"
});

let cookie = {
  httpOnly: false
};

/**
  key: 发送到客户端 cookie 的 key
*/
app.use(
  session({
    key: "session_id",
    store, // session 持久化的仓库, 在不关联数据库的情况下, 内部实现了一个临时存储仓库
    cookie
  })
);

router.get("/set", ctx => {
  /**
    设置 session 数据, 并且将 {} 持久化到数据库
  */
  ctx.session = {
    user_id: Math.random()
      .toString(36)
      .substr(2),
    count: 0
  };

  ctx.body = ctx.session;
});

router.get("/", ctx => {
  let hasSession = ctx.session && Object.keys(ctx.session).length > 0;
  if (hasSession) {
    ctx.session.count = ctx.session.count + 1;
    ctx.body = ctx.session;
  } else {
    ctx.body = `
      <p>服务端没有当前用户 session 信息</p>
      <p>请访问 /set 路径来为当前用户生成 session 信息</p>
      <a href="/set">/set</a>
    `;
  }
});

app.use(router.routes(), router.allowedMethods());

app.listen(3002);

再配上一张流程图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值