koa session 存储方案
通过 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);
再配上一张流程图: